modules/up/src/Core/sys/Address.cc
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- Address
- Address
- Address
- Address
- set
- get
- name
- inside
1 //
2 // $Id: Address.cc,v 1.1.1.1 2000/03/10 16:32:20 engin Exp $
3 //
4 // Address.cc
5 // Author: Ramesh Govindan <govindan@isi.edu>
6
7 #ifdef HAVE_CONFIG_H
8 #include <config.h>
9 #endif
10
11 #include <cstdio>
12 #include <cstdlib>
13 #include <cerrno>
14
15 extern "C" {
16 #include <string.h>
17 #if NEED_MEMORY_H
18 #include <memory.h>
19 #endif // NEED_MEMORY_H
20
21 #include <sys/types.h>
22 #include <sys/socket.h>
23 #include <netinet/in.h>
24 #include <arpa/inet.h>
25 }
26
27 #include "util/Types.hh"
28 #include "sys/Address.hh"
29
30 u_int masks[] ={ 0x00000000,
31 0x80000000, 0xC0000000, 0xE0000000, 0xF0000000,
32 0xF8000000, 0xFC000000, 0xFE000000, 0xFF000000,
33 0xFF800000, 0xFFC00000, 0xFFE00000, 0xFFF00000,
34 0xFFF80000, 0xFFFC0000, 0xFFFE0000, 0xFFFF0000,
35 0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000,
36 0xFFFFF800, 0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00,
37 0xFFFFFF80, 0xFFFFFFC0, 0xFFFFFFE0, 0xFFFFFFF0,
38 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE, 0xFFFFFFFF
39 };
40
41 // Operations on IP addresses. IP address are stored in the
42 // address struct in host byte order, and only the name() operation
43 // converts it into network byte order before printing it.
44 //
45
46 Address::Address()
/* [<][>][^][v][top][bottom][index][help] */
47 {
48 address= nameString[0]= 0;
49 }
50
51 Address::Address(const char * const str) {
/* [<][>][^][v][top][bottom][index][help] */
52 address= ntohl(inet_addr(str));
53 strcpy(nameString, str);
54 }
55
56 Address::Address(U32 a) : address(a) {
/* [<][>][^][v][top][bottom][index][help] */
57 nameString[0]= 0;
58 }
59
60 Address::Address(const Address& other) {
/* [<][>][^][v][top][bottom][index][help] */
61 address= other.address;
62 memcpy(nameString, other.nameString, MaxAddressNameLength);
63 }
64
65 Boolean
66 Address::operator<(const Address& other) const
67 {
68 return (address < other.address);
69 }
70
71 Boolean
72 Address::operator==(const Address& other) const
73 {
74 return (address == other.address);
75 }
76
77 void
78 Address::operator=(const Address& other)
79 {
80 address = other.address;
81 memcpy(nameString, other.nameString, MaxAddressNameLength);
82 }
83
84 void
85 Address::set(U32 addr)
/* [<][>][^][v][top][bottom][index][help] */
86 {
87 address = addr;
88 nameString[0]= 0;
89 }
90
91 U32
92 Address::get() const
/* [<][>][^][v][top][bottom][index][help] */
93 {
94 return address;
95 }
96
97 char*
98 Address::name() const
/* [<][>][^][v][top][bottom][index][help] */
99 {
100 if (!nameString[0]) {
101 struct in_addr in;
102
103 in.s_addr = htonl(address);
104 sprintf(nameString,
105 "%s",
106 ::inet_ntoa(in));
107 }
108 return nameString;
109 }
110
111 bool Address::inside(Address &a, int len) {
/* [<][>][^][v][top][bottom][index][help] */
112 return (address & masks[len]) == (a.address & masks[len]);
113 }
114
115 //
116 // Copyright (c) 1994 by the University of Southern California.
117 // All rights reserved.
118 //
119 // Permission to use, copy, modify, and distribute this software and
120 // its documentation in source and binary forms for lawful
121 // non-commercial purposes and without fee is hereby granted, provided
122 // that the above copyright notice appear in all copies and that both
123 // the copyright notice and this permission notice appear in supporting
124 // documentation, and that any documentation, advertising materials,
125 // and other materials related to such distribution and use acknowledge
126 // that the software was developed by the University of Southern
127 // California and/or Information Sciences Institute.
128 // The name of the University of Southern California may not
129 // be used to endorse or promote products derived from this software
130 // without specific prior written permission.
131 //
132 // THE UNIVERSITY OF SOUTHERN CALIFORNIA DOES NOT MAKE ANY REPRESENTATIONS
133 // ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. THIS SOFTWARE IS
134 // PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
135 // INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
136 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND
137 // NON-INFRINGEMENT.
138 //
139 // IN NO EVENT SHALL USC, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
140 // SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT,
141 // TORT, OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH,
142 // THE USE OR PERFORMANCE OF THIS SOFTWARE.
143 //
144 // Questions concerning this software should be directed to
145 // info-ra@isi.edu.
146 //