1// NetAddress.h
2
3#ifndef NET_FS_NET_ADDRESS_H
4#define NET_FS_NET_ADDRESS_H
5
6#ifdef HAIKU_TARGET_PLATFORM_BEOS
7#	include <socket.h>
8#else
9#	include <netinet/in.h>
10#	include <sys/socket.h>
11#endif
12
13namespace BPrivate {
14class HashString;
15};
16using BPrivate::HashString;
17
18// NetAddress
19class NetAddress {
20public:
21								NetAddress();
22								NetAddress(const sockaddr_in& address);
23								NetAddress(const NetAddress& address);
24
25			void				SetIP(int32 address);
26			int32				GetIP() const;
27
28			void				SetPort(uint16 port);
29			uint16				GetPort() const;
30
31			void				SetAddress(const sockaddr_in& address);
32			const sockaddr_in&	GetAddress() const;
33
34			bool				IsLocal() const;
35
36			status_t			GetString(HashString* string,
37									bool includePort = true) const;
38
39			uint32				GetHashCode() const;
40
41			NetAddress&			operator=(const NetAddress& address);
42			bool				operator==(const NetAddress& address) const;
43			bool				operator!=(const NetAddress& address) const;
44
45private:
46			sockaddr_in			fAddress;
47};
48
49// NetAddressResolver
50class NetAddressResolver {
51public:
52								NetAddressResolver();
53								~NetAddressResolver();
54
55			status_t			InitCheck() const;
56
57			status_t			GetHostAddress(const char* hostName,
58									NetAddress* address);
59
60private:
61			class Resolver;
62
63	static	void				_Lock();
64	static	void				_Unlock();
65
66			Resolver*			fResolver;
67
68	static	Resolver* volatile	sResolver;
69	static	int32				sLockCounter;
70};
71
72#endif	// NET_FS_NET_ADDRESS_H
73