From ae68bb327396c10d4ddb28f968a8ef963cf60a67 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Wed, 16 Oct 2002 22:54:05 +0000 Subject: [PATCH] Re-written by Scott Mansfield git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1548 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/net/NetAddress.h | 219 +++++++++++++++++------------------- 1 file changed, 106 insertions(+), 113 deletions(-) diff --git a/headers/os/net/NetAddress.h b/headers/os/net/NetAddress.h index 364cd21987..268913ce48 100644 --- a/headers/os/net/NetAddress.h +++ b/headers/os/net/NetAddress.h @@ -1,113 +1,106 @@ -//------------------------------------------------------------------------------ -// Copyright (c) 2001-2002, OpenBeOS -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -//------------------------------------------------------------------------------ - -#ifndef _NETADDRESS_H -#define _NETADDRESS_H - -#include -#include -#include - -#include -#include - -/* - * BNetAddress - * - * This class is used to represent network addresses, and provide access - * to a network address in a variety of formats. BNetAddress provides various ways - * to get and set a network address, converting to or from the chosen representation - * into a generic internal one. - */ - -class NLAddress; - -class BNetAddress : public BArchivable -{ -public: - - BNetAddress(BMessage *archive); - virtual ~BNetAddress(); - - virtual status_t Archive(BMessage *into, bool deep = true) const; - static BArchivable *Instantiate(BMessage *archive); - - BNetAddress(const char *hostname = 0, unsigned short port = 0); - BNetAddress(const struct sockaddr_in &sa); - BNetAddress(in_addr addr, int port = 0); - BNetAddress(uint32 addr, int port = 0 ); - BNetAddress(const BNetAddress &); - BNetAddress(const char *hostname, const char *protocol, const char *service); - - BNetAddress &operator=(const BNetAddress &); - - /* - * It is important to call InitCheck() after creating an instance of this class. - */ - status_t InitCheck(); - - /* - * BNetAddress::set() sets the internal address representation to refer - * to the internet address specified by the passed-in data. - * Returns true if successful, false otherwise. - */ - status_t SetTo(const char *hostname, const char *protocol, const char *service); - status_t SetTo(const char *hostname = 0, unsigned short port = 0); - status_t SetTo(const struct sockaddr_in &sa); - status_t SetTo(in_addr addr, int port = 0); - status_t SetTo(uint32 addr=INADDR_ANY, int port = 0); - - /* - * BNetAddress::get() converts the internal internet address representation - * into the specified form and returns it by filling in the passed-in parameters. - * Returns true if successful, false otherwise. - */ - status_t GetAddr(char *hostname = 0, unsigned short *port = 0) const; - status_t GetAddr(struct sockaddr_in &sa) const; - status_t GetAddr(in_addr &addr, unsigned short *port = 0) const; - - inline NLAddress *GetImpl() const; - -protected: - status_t m_init; - -private: - virtual void _ReservedBNetAddressFBCCruft1(); - virtual void _ReservedBNetAddressFBCCruft2(); - virtual void _ReservedBNetAddressFBCCruft3(); - virtual void _ReservedBNetAddressFBCCruft4(); - virtual void _ReservedBNetAddressFBCCruft5(); - virtual void _ReservedBNetAddressFBCCruft6(); - - int32 __ReservedBNetAddressFBCCruftData[9]; -}; - - - - -inline NLAddress *BNetAddress::GetImpl() const -{ - return NULL; // No Nettle backward compatibility -} - - -#endif // _NETADDRESS_H \ No newline at end of file +/*=--------------------------------------------------------------------------=* + * NetAddress.h -- Interface definition for the BNetAddress class. + * + * Written by S.T. Mansfield (thephantom@mac.com) + * + * Remarks: + * Mr. Phipps, put that fish away, dude. + *=--------------------------------------------------------------------------=* + * Copyright (c) 2002, The OpenBeOS project. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *=--------------------------------------------------------------------------=* + */ + +#ifndef NETADDRESS_H +#define NETADDRESS_H + +#include +#include +#include +#include + +/* + * Empty forward declaration to satisfy the GetImpl method. + */ +class NLAddress; + +class BNetAddress : public BArchivable +{ +public: + BNetAddress( BMessage* archive ); + virtual ~BNetAddress( void ); + + virtual status_t Archive( BMessage* into, bool deep = true ) const; + static BArchivable* Instantiate( BMessage* archive ); + + BNetAddress( const char* hostname = NULL, unsigned short port = 0 ); + BNetAddress( const struct sockaddr_in& sa ); + BNetAddress( in_addr addr, int port = 0 ); + BNetAddress( uint32 addr, int port = 0 ); + BNetAddress( const BNetAddress& refparam ); + BNetAddress( const char* hostname, const char* protocol, const char* service ); + + BNetAddress& operator=( const BNetAddress& ); + + status_t InitCheck( void ) const; + + status_t SetTo( const char* hostname, const char* protocol, const char* service ); + status_t SetTo( const char* hostname = NULL, unsigned short port = 0 ); + status_t SetTo( const struct sockaddr_in& sa ); + status_t SetTo( in_addr addr, int port = 0 ); + status_t SetTo( uint32 addr = INADDR_ANY, int port = 0 ); + + status_t GetAddr( char* hostname = NULL, unsigned short* port = NULL ) const; + status_t GetAddr( struct sockaddr_in& sa ) const; + status_t GetAddr( in_addr& addr, unsigned short* port = NULL ) const; + + inline NLAddress *GetImpl( void ) const; + +protected: +// Attributes. + status_t fInitialized; + + // Class-specific attributes. Basically re-encapsulate the saddr_in + // struct (the POSiX version, hopefully). We can be inheritance-friendly + // here and still not break binary compatibility with R5. + int32 fFamily; // Encapsulation of sockaddr::sin_family + int32 fPort; // Encapsulation of sockaddr::sin_port + int32 fAddress; // Encapsulation of sockaddr::sin_addr.s_addr + +private: +// Private copy helper. + status_t clone( const BNetAddress& RefParam ); + +// Not used, here to maintain R5 binary compatiblilty. + int32 fPrivateData[6]; +}; + + +// WARNING: This method, as it stands, breaks R5 compatibility *STM*. +inline NLAddress* BNetAddress::GetImpl( void ) const +{ + return NULL; // Cheeky, yes; but no Nettle stuff is allowed... +} + +#endif // <-- #ifndef NETADDRESS_H + + +/*=------------------------------------------------------------------- End -=*/ +