rob@76
|
1 /*
|
rob@76
|
2 oscpack -- Open Sound Control (OSC) packet manipulation library
|
rob@76
|
3 http://www.rossbencina.com/code/oscpack
|
rob@76
|
4
|
rob@76
|
5 Copyright (c) 2004-2013 Ross Bencina <rossb@audiomulch.com>
|
rob@76
|
6
|
rob@76
|
7 Permission is hereby granted, free of charge, to any person obtaining
|
rob@76
|
8 a copy of this software and associated documentation files
|
rob@76
|
9 (the "Software"), to deal in the Software without restriction,
|
rob@76
|
10 including without limitation the rights to use, copy, modify, merge,
|
rob@76
|
11 publish, distribute, sublicense, and/or sell copies of the Software,
|
rob@76
|
12 and to permit persons to whom the Software is furnished to do so,
|
rob@76
|
13 subject to the following conditions:
|
rob@76
|
14
|
rob@76
|
15 The above copyright notice and this permission notice shall be
|
rob@76
|
16 included in all copies or substantial portions of the Software.
|
rob@76
|
17
|
rob@76
|
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
rob@76
|
19 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
rob@76
|
20 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
rob@76
|
21 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
rob@76
|
22 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
rob@76
|
23 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
rob@76
|
24 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
rob@76
|
25 */
|
rob@76
|
26
|
rob@76
|
27 /*
|
rob@76
|
28 The text above constitutes the entire oscpack license; however,
|
rob@76
|
29 the oscpack developer(s) also make the following non-binding requests:
|
rob@76
|
30
|
rob@76
|
31 Any person wishing to distribute modifications to the Software is
|
rob@76
|
32 requested to send the modifications to the original developer so that
|
rob@76
|
33 they can be incorporated into the canonical version. It is also
|
rob@76
|
34 requested that these non-binding requests be included whenever the
|
rob@76
|
35 above license is reproduced.
|
rob@76
|
36 */
|
rob@76
|
37 #ifndef INCLUDED_OSCPACK_IPENDPOINTNAME_H
|
rob@76
|
38 #define INCLUDED_OSCPACK_IPENDPOINTNAME_H
|
rob@76
|
39
|
rob@76
|
40
|
rob@76
|
41 class IpEndpointName{
|
rob@76
|
42 static unsigned long GetHostByName( const char *s );
|
rob@76
|
43 public:
|
rob@76
|
44 static const unsigned long ANY_ADDRESS = 0xFFFFFFFF;
|
rob@76
|
45 static const int ANY_PORT = -1;
|
rob@76
|
46
|
rob@76
|
47 IpEndpointName()
|
rob@76
|
48 : address( ANY_ADDRESS ), port( ANY_PORT ) {}
|
rob@76
|
49 IpEndpointName( int port_ )
|
rob@76
|
50 : address( ANY_ADDRESS ), port( port_ ) {}
|
rob@76
|
51 IpEndpointName( unsigned long ipAddress_, int port_ )
|
rob@76
|
52 : address( ipAddress_ ), port( port_ ) {}
|
rob@76
|
53 IpEndpointName( const char *addressName, int port_=ANY_PORT )
|
rob@76
|
54 : address( GetHostByName( addressName ) )
|
rob@76
|
55 , port( port_ ) {}
|
rob@76
|
56 IpEndpointName( int addressA, int addressB, int addressC, int addressD, int port_=ANY_PORT )
|
rob@76
|
57 : address( ( (addressA << 24) | (addressB << 16) | (addressC << 8) | addressD ) )
|
rob@76
|
58 , port( port_ ) {}
|
rob@76
|
59
|
rob@76
|
60 // address and port are maintained in host byte order here
|
rob@76
|
61 unsigned long address;
|
rob@76
|
62 int port;
|
rob@76
|
63
|
rob@76
|
64 bool IsMulticastAddress() const { return ((address >> 24) & 0xFF) >= 224 && ((address >> 24) & 0xFF) <= 239; }
|
rob@76
|
65
|
rob@76
|
66 enum { ADDRESS_STRING_LENGTH=17 };
|
rob@76
|
67 void AddressAsString( char *s ) const;
|
rob@76
|
68
|
rob@76
|
69 enum { ADDRESS_AND_PORT_STRING_LENGTH=23};
|
rob@76
|
70 void AddressAndPortAsString( char *s ) const;
|
rob@76
|
71 };
|
rob@76
|
72
|
rob@76
|
73 inline bool operator==( const IpEndpointName& lhs, const IpEndpointName& rhs )
|
rob@76
|
74 {
|
rob@76
|
75 return (lhs.address == rhs.address && lhs.port == rhs.port );
|
rob@76
|
76 }
|
rob@76
|
77
|
rob@76
|
78 inline bool operator!=( const IpEndpointName& lhs, const IpEndpointName& rhs )
|
rob@76
|
79 {
|
rob@76
|
80 return !(lhs == rhs);
|
rob@76
|
81 }
|
rob@76
|
82
|
rob@76
|
83 #endif /* INCLUDED_OSCPACK_IPENDPOINTNAME_H */
|