#include <common.h>
Public Member Functions | |
| Address () | |
| Constructor. | |
| Address (const char *hostname, short port) | |
| Alternative construcor with parameters. | |
| bool | isSet () |
| void | setPort (const short port) |
| short | getPort () |
| get the port # | |
| void | setHostname (const char *hostname) |
| set the hostname | |
| char * | getHostname () |
| get the hostname string pointer | |
| unsigned char * | getHWAddr () |
| get the MAC address | |
| void | setHWAddr (unsigned char *hwaddr) |
| void | setHWAddrFromColonFormat (const char *colon_seperated_macaddr) |
| char * | convertHWAddrToColonFormat () |
| Address * | clone () |
| function to clone this address | |
| bool | isSame (Address *addr) |
| bool | isSameMACAddr (Address *addr) |
Protected Attributes | |
| char | hostname_ [MAX_HOSTNAME_LENGTH] |
| both hostname and ipaddress format (10.0.0.1) could be given as a string | |
| short | port_ |
| port number for UDP or TCP (Transport layer) | |
| char * | ipaddr_ |
| optional use... ignore.... | |
| unsigned char | macaddr_ [MAC_ADDR_LENGTH] |
| optional use for Ethernet Socket | |
Address Class is to handle addresses of unix/linux sockets. For normal sockets, the address used will be a combination of IP address and port. In Socket Programming, IP address itself is usually not enough to distinguish an connection, port # is also needed. For PF_PACKET sockets, the address used is MAC address (HW address). So, we also put macaddr_ as a member variable.
Definition at line 148 of file common.h.
|
|
Convert HW Address to Colon Seperated format Definition at line 218 of file common.cpp. References macaddr_. 00219 {
00220 char *colonformat = new char[17];
00221 //printf("HW Address: %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",u[0], u[1], u[2], u[3], u[4], u[5]);
00222 sprintf(colonformat,"%02X:%02X:%02X:%02X:%02X:%02X",
00223 macaddr_[0],macaddr_[1],macaddr_[2],macaddr_[3],macaddr_[4],macaddr_[5]);
00224 // cout << colonformat << endl;
00225 return colonformat;
00226
00227 }
|
|
|
Compare whether the two normal "name+port" address is same or not Definition at line 186 of file common.h. References getHostname(), getPort(), hostname_, and port_. 00187 {
00188 if ( port_== addr->getPort()) return false;
00189 if ( strcmp( hostname_, addr->getHostname() ) == 0 ) return true;
00190 return false;
00191 }
|
|
|
Compare if two mac address is same or not. use memcmp to compare each byte. Definition at line 241 of file common.cpp. References getHWAddr(), and macaddr_. 00242 {
00243 if ( memcmp(macaddr_, addr->getHWAddr(), MAC_ADDR_LENGTH*sizeof(unsigned char)) == 0 )
00244 return true;
00245 return false;
00246
00247 }
|
|
|
Check if an address has already been set or remain uninitialized Definition at line 161 of file common.h. References hostname_, and port_. Referenced by ReceivingPort::init(), and SendingPort::init().
|
|
|
set the hostname use strcpy function to duplicate a string Definition at line 172 of file common.h. References hostname_. Referenced by Address(), Port::setHostname(), and Port::setRemoteHostname().
|
|
|
copy mac address Definition at line 232 of file common.cpp. References macaddr_. Referenced by clone(). 00233 {
00234 memcpy(macaddr_, hwaddr , MAC_ADDR_LENGTH*sizeof(unsigned char));
00235 }
|
|
|
Function to convert the input MAC address string to bytes. First, check the MAC address is valid
Definition at line 163 of file common.cpp. References macaddr_. 00164 {
00165 char HexChar;
00166 //First verify the address
00167 int Count = 0;
00168 int num_mac_char = 0;
00169 /* Two ASCII characters per byte of binary data */
00170 bool error_end = false;
00171 while (!error_end)
00172 { /* Scan string for first non-hex character. Also stop scanning at end
00173 of string (HexChar == 0), or when out of six binary storage space */
00174 HexChar = (char)colonmac[Count++];
00175 if (HexChar == ':') continue;
00176 if (HexChar > 0x39) HexChar = HexChar | 0x20; /* Convert upper case to lower */
00177 if ( (HexChar == 0x00) || num_mac_char >= (MAC_ADDR_LENGTH * 2) ||
00178 (!(((HexChar >= 0x30) && (HexChar <= 0x39))|| /* 0 - 9 */
00179 ((HexChar >= 0x61) && (HexChar <= 0x66))) ) ) /* a - f */
00180 {
00181 error_end = true;
00182 } else
00183 num_mac_char++;
00184 }
00185 if (num_mac_char != MAC_ADDR_LENGTH * 2 )
00186 throw "Given Wrong MAC address Format.";
00187
00188 // Conversion
00189 unsigned char HexValue = 0x00;
00190 Count = 0;
00191 num_mac_char = 0;
00192 int mac_byte_num = 0;
00193 while (mac_byte_num < MAC_ADDR_LENGTH )
00194 {
00195 HexChar = (char)colonmac[Count++];
00196 if (HexChar == ':') continue;
00197 num_mac_char++; // locate a HEX character
00198 if (HexChar > 0x39)
00199 HexChar = HexChar | 0x20; /* Convert upper case to lower */
00200 HexChar -= 0x30;
00201 if (HexChar > 0x09) /* HexChar is "a" - "f" */
00202 HexChar -= 0x27;
00203 HexValue = (HexValue << 4) | HexChar;
00204 if (num_mac_char % 2 == 0 ) /* If we've converted two ASCII chars... */
00205 {
00206 macaddr_[mac_byte_num] = HexValue;
00207 HexValue = 0x0;
00208 mac_byte_num++;
00209 }
00210 }
00211 return;
00212 }
|
|
|
set the port # of the Address Definition at line 165 of file common.h. References port_. Referenced by Address(), Port::setPort(), and Port::setRemotePort(). 00165 { port_ = port; }
|
1.4.2