summaryrefslogtreecommitdiff
path: root/comm/Address.h
blob: d72dca5399548135963ea81610a577ebde2f785b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 *	Ivy League
 *
 *	Socket addresses
 *
 *	Copyright 1990-2000
 *	Laboratoire de Recherche en Informatique (LRI)
 *	Centre d'Etudes de la Navigation Aerienne (CENA)
 *
 *	original code by Michel Beaudouin-Lafon,
 *	modified by Stephane Chatty and Stephane Sire
 *
 *	$Id$
 *
 */

#ifndef Address_H_
#define Address_H_

#include "cplus_bugs.h"
#include "ivl/bool.h"
#include "ivl/word.h"
#include "ivl/String.h"

#include <sys/types.h>
#include <sys/socket.h>

typedef struct sockaddr SockAddr;

/***** all this is necessary for function Decode only. This should be investigated */
#include <netinet/in.h>
#ifdef UNIX_SOCK
#include <sys/un.h>
#ifndef AF_UNIX
#define AF_UNIX	AF_UNSPEC
#endif
#endif
#ifdef IRDA_SOCK
#include <linux/irda.h>
#endif

union gen_addr {
	struct sockaddr		sa;		// default
#ifdef UNIX_SOCK
	struct sockaddr_un	su;		// unix
#endif
#ifdef IRDA_SOCK
	struct sockaddr_irda	sir;		// irda
#endif
	struct sockaddr_in	si;		// inet
};
/***** end of part that is necessary for Decode only */

typedef union gen_addr GEN_ADDR;	/* useful for adresses returned by system calls */

class IvlAddress {
protected:
	bool	Valid;

public:
		IvlAddress ();
virtual		~IvlAddress ();
	
	bool		IsValid () const		{ return Valid; }
virtual	int		Family () = 0;		// AF_UNSPEC, AF_UNIX, AF_INET
virtual	int		Length () = 0;
virtual	SockAddr*	GetSockAddr () = 0;
virtual	char*		StrRepr (char* buf) = 0;

static	IvlAddress*	Decode (GEN_ADDR*, int);
};

#endif /* Address_H_ */