From ba066c34dde204aa192d03a23a81356374d93731 Mon Sep 17 00:00:00 2001 From: chatty Date: Wed, 7 Apr 1993 11:50:31 +0000 Subject: Initial revision --- comm/Address.h | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 comm/Address.h (limited to 'comm/Address.h') diff --git a/comm/Address.h b/comm/Address.h new file mode 100644 index 0000000..b220339 --- /dev/null +++ b/comm/Address.h @@ -0,0 +1,118 @@ +/* + * The Unix Channel + * + * by Michel Beaudouin-Lafon + * + * Copyright 1990-1993 + * Laboratoire de Recherche en Informatique (LRI) + * + * Addresses + * + * $Id$ + * $CurLog$ + */ + +#ifndef Address_H_ +#define Address_H_ + +#include "cplus_bugs.h" +#include "global.h" +#include "ccu/SmartPointer.h" + +#include +#include +#include + +#ifdef UNIX_SOCK +#include +#endif + +#ifndef AF_UNIX +#define AF_UNIX AF_UNSPEC +#endif + + +typedef struct sockaddr SockAddr; + +/* this union is useful for adresses returned by system calls */ + +typedef union { + struct sockaddr sa; // default +#ifdef UNIX_SOCK + struct sockaddr_un su; // unix +#endif + struct sockaddr_in si; // inet +} GEN_ADDR; + + +class UchAddress : public CcuSmartData { +protected: + bool Valid; + +public: + UchAddress (); + ~UchAddress (); + + bool IsValid () const { return Valid; } +virtual int Family (); // AF_UNSPEC, AF_UNIX, AF_INET +virtual int Length (); +virtual SockAddr* GetSockAddr (); +virtual char* StrRepr (char* buf); + +static UchAddress* Decode (GEN_ADDR*, int); +}; + +PointerClass (pUchAddress, UchAddress) + +class UchInetAddress : public UchAddress { +protected: + struct sockaddr_in Addr; + +public: + UchInetAddress (); + UchInetAddress (lword, sword = 0); // hostid, port# + UchInetAddress (const char*, sword = 0); // hostname, port# + ~UchInetAddress (); + + int Family (); + int Length (); + SockAddr* GetSockAddr (); +inline sword Port () { return Addr.sin_port; } +inline lword Host () { return Addr.sin_addr.s_addr; } + char* StrRepr (char* buf); + +static lword LoopBack (); +}; + +#ifndef INADDR_LOOPBACK +#define INADDR_LOOPBACK (INET_ADDR::LoopBack ()) +#endif + +#define ANYADDR ((lword) INADDR_ANY) +#define LOOPBACK ((lword) INADDR_LOOPBACK) +#define BROADCAST ((lword) INADDR_BROADCAST) + + + +#ifdef UNIX_SOCK + +class UchUnixAddress : public UchAddress { +protected: + struct sockaddr_un Addr; + +public: + UchUnixAddress (); + UchUnixAddress (const char*); + ~UchUnixAddress (); + + int Family (); + int Length (); + SockAddr* GetSockAddr (); + char* StrRepr (char* buf); +}; + +#endif /* UNIX_ADDR */ + + +#endif /* Address_H_ */ + -- cgit v1.1