⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 address.cpp

📁 SNMP++程序源码 for ll .8snmp++2_8.tar.Z 嵌入式linux环境下的SNMP开发代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  // 123456789012345678901  // XXXXXXXX-XXXXXXXXXXXX  21 len  //  // XXXXXXXX-XXXXXX-XXXXXX 22 len  // need at least 21 chars and no more than 22  if ( (tmplen <21) || (tmplen >22))     return FALSE;  // convert the string to all lower case  // this allows hex values to be in upper or lower  for (z=0;z< tmplen;z++)    temp[z] = tolower(temp[z]);  // check for separated nodeid  // if found remove it  if (temp[15] == '-')  {     for(z=16;z<tmplen;z++)        temp[z-1] = temp[z];     temp[tmplen-1] = 0;  }  // no dot or colon separator check  separator = temp[8];  if (( separator != ':') &&       ( separator != '.') &&       ( separator != '-') &&       ( separator != ' '))    return FALSE;  // separate the strings  str1 = ( unsigned char *) temp;  while( *str1 != separator) str1++;  str2 = str1 + 1;  *str1 = 0;  str1= ( unsigned char *) temp;  // check len of the network portion  if ( strlen((char *) str1) != 8) return FALSE;  // check len of mac portion  if ( strlen( (char *) str2) != 12) return FALSE;  // ok we like then lens, make sure that all chars are 0-f  // check out the net id  tmp = str1;  while( *tmp != 0)    if (((*tmp >= '0') && (*tmp <= '9'))||   // good 0-9	((*tmp >= 'a') && (*tmp <= 'f')))    // or a-f      tmp++;    else      return FALSE;  // check out the MAC address  tmp = str2;  while( *tmp != 0)    if (((*tmp >= '0') && (*tmp <= '9'))||   // good 0-9	((*tmp >= 'a') && (*tmp <= 'f')))    // or a-f      tmp++;    else      return FALSE;  // convert to target string  tmp = str1;  while ( *tmp != 0)  {  if (( *tmp >= '0') && ( *tmp <= '9'))    *tmp = *tmp - (char unsigned )'0';  else    *tmp = *tmp - (char unsigned) 'a' + (char unsigned) 10;  tmp++;  }  // network id portion  address_buffer[0] = (str1[0]*16) + str1[1];  address_buffer[1] = (str1[2]*16) + str1[3];  address_buffer[2] = (str1[4]*16) + str1[5];  address_buffer[3] = (str1[6]*16) + str1[7];  tmp = str2;  while ( *tmp != 0)  {  if (( *tmp >= '0') && ( *tmp <= '9'))    *tmp = *tmp - (char unsigned) '0';  else    *tmp = *tmp - (char unsigned) 'a'+ (char unsigned) 10;  tmp++;  }  address_buffer[4] = (str2[0]*16)  + str2[1];  address_buffer[5] = (str2[2]*16)  + str2[3];  address_buffer[6] = (str2[4]*16)  + str2[5];  address_buffer[7] = (str2[6]*16)  + str2[7];  address_buffer[8] = (str2[8]*16)  + str2[9];  address_buffer[9] = (str2[10]*16) + str2[11];  return TRUE;};//----[ IPX address char * cast ]--------------------------------------IpxAddress::operator const char *() const{  return (char *)output_buffer;}//----[ IPX address get char representation ]--------------------------char * WINFAR IpxAddress::get_printable(){  return (char *)output_buffer;}//----[ IPX address format output ]-------------------------------------void IpxAddress::format_output(){  if ( valid_flag)    sprintf((char *) output_buffer,	    "%02x%02x%02x%02x%c%02x%02x%02x%02x%02x%02x",	    address_buffer[0],address_buffer[1],	    address_buffer[2],address_buffer[3],'-',	    address_buffer[4],address_buffer[5],	    address_buffer[6],address_buffer[7],	    address_buffer[8],address_buffer[9]);  else    output_buffer[0] = 0;};// get the host id portion of an ipx addressint IpxAddress::get_hostid( MacAddress& mac){   if ( valid_flag)   {       char buffer[18];       sprintf( buffer,"%02x:%02x:%02x:%02x:%02x:%02x", address_buffer[4],                address_buffer[5], address_buffer[6], address_buffer[7],                address_buffer[8], address_buffer[9]);       MacAddress temp( buffer);       // mac = (SnmpSyntax&) temp;       mac = temp;       if ( mac.valid())          return TRUE;       else          return FALSE;   }   else      return FALSE;};//------[ return the type ]----------------------------------addr_type IpxAddress::get_type() const{ return type_ipx; };//========================================================================//======== IpxSockAddress Implementation =================================//========================================================================//-----------[ syntax type ]----------------------------------------------SmiUINT32 IpxSockAddress::get_syntax(){ return sNMP_SYNTAX_OCTETS; };//----------[ constructor no args ]--------------------------------------IpxSockAddress::IpxSockAddress( void):IpxAddress(){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = IPXSOCKLEN;  smival.value.string.ptr = address_buffer;  set_socket(0);  format_output();};//-----------[ construct an IpxSockAddress with another IpxSockAddress]----IpxSockAddress::IpxSockAddress( const IpxSockAddress &ipxaddr):IpxAddress(ipxaddr){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = IPXSOCKLEN;  smival.value.string.ptr = address_buffer;  // copy the socket value  set_socket(ipxaddr.get_socket());  format_output();};//---------------[ construct a IpxSockAddress from a string ]--------------IpxSockAddress::IpxSockAddress( const char *inaddr):IpxAddress(){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = IPXSOCKLEN;  smival.value.string.ptr = address_buffer;   valid_flag = parse_address( (char *) inaddr);    format_output();};//---------------[ construct a IpxSockAddress from a GenAddress ]----------IpxSockAddress::IpxSockAddress( const GenAddress &genaddr):IpxAddress(){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = IPXSOCKLEN;  smival.value.string.ptr = address_buffer;  valid_flag = FALSE;  unsigned short socketid = 0;  // allow use of an ipx or ipxsock address  if ( (genaddr.get_type() == type_ipx) )  {    valid_flag = genaddr.valid();    if ( valid_flag)    {      // copy in the Ipx address data      IpxAddress temp_ipx( (const char *) genaddr);      *this = temp_ipx;    }  }  else  if ( (genaddr.get_type() == type_ipxsock) )  {    valid_flag = genaddr.valid();    if ( valid_flag)    {      // copy in the Ipx address data      IpxSockAddress temp_ipxsock( (const char *) genaddr);      *this = temp_ipxsock;      //  socketid info since are making an IpxSockAddress      socketid = temp_ipxsock.get_socket();    }  }  set_socket(socketid);  format_output();};//------------[ construct an IpxSockAddress from a IpxAddress ]--------------IpxSockAddress::IpxSockAddress( const IpxAddress &ipxaddr):IpxAddress(ipxaddr){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = IPXSOCKLEN;  smival.value.string.ptr = address_buffer;  set_socket(0);  format_output();};//-----[ destructor ]--------------------------------------------------IpxSockAddress::~IpxSockAddress(){};// copy an instance of this ValueSnmpSyntax& IpxSockAddress::operator=( SnmpSyntax &val){  // protect against assignment from itself  if ( this == &val )      return *this;  valid_flag=0;      	// will set to TRUE if really valid  if (val.valid()){    switch (val.get_syntax()){    case sNMP_SYNTAX_OCTETS:       {        // See if it is of the Ipx address family        // This handles IpxSockAddress == IpxAddress        IpxSockAddress temp_ipx(val.get_printable());        if (temp_ipx.valid()){          *this = temp_ipx;		// ipxsock = ipxsock        }        // See if it is an OctetStr of appropriate length        else if (((IpxSockAddress &)val).smival.value.string.len == IPXSOCKLEN){	  MEMCPY(address_buffer, 		 ((IpxSockAddress &)val).smival.value.string.ptr, 		 IPXSOCKLEN);	  valid_flag=1;        }      }      break;    }  }  format_output();  return *this;};// assignment to another IpAddress object overloadedIpxSockAddress& IpxSockAddress::operator=( const IpxSockAddress &ipxaddr){  // protect against assignment from itself  if ( this == &ipxaddr )      return *this;  (IpxAddress&)*this = ipxaddr; 	// use ancestor assignment for ipx addr  set_socket(ipxaddr.get_socket());	// copy socket value  format_output();  return *this;}//----------[ create a new instance of this Value ]------------------------SnmpSyntax WINFAR *IpxSockAddress::clone() const { return (SnmpSyntax *) new IpxSockAddress(*this); };//----[ IPXSock address char * cast ]--------------------------------------IpxSockAddress::operator const char *() const{  return (char *)output_buffer;}//----[ IPXSock address get char representation ]--------------------------char * WINFAR IpxSockAddress::get_printable(){  return (char *)output_buffer;}//----[ IPX address format output ]-------------------------------------void IpxSockAddress::format_output(){  IpxAddress::format_output(); // allow ancestors to format their buffers  if ( valid_flag)    sprintf((char *) output_buffer,"%s/%d",	    IpxAddress::get_printable(), get_socket());  else    output_buffer[0] = 0;};//-----[ IP Address parse Address ]---------------------------------int IpxSockAddress::parse_address( const char *inaddr){   char buffer[MAX_FRIENDLY_NAME];   unsigned short socketid=0;   if (inaddr && (strlen( inaddr)< MAX_FRIENDLY_NAME))     strcpy( buffer, inaddr);   else   {     valid_flag = FALSE;     return FALSE;   }   // look for port info @ the end of the string   // port can be delineated by a ':' or a '/'   // if neither are present then just treat it    // like a normal IpAddress   char *tmp;   tmp = strstr( buffer,"/");   if (tmp != NULL)   {     *tmp=0;   // new null terminator     tmp++;     socketid = atoi( tmp);   }   set_socket(socketid);   return IpxAddress::parse_address( buffer);};//-------------[ set the socket number ]----------------------------------void IpxSockAddress::set_socket( const unsigned short s){   unsigned short sock_nbo = htons(s);  MEMCPY(&address_buffer[IPXLEN], &sock_nbo, 2);};//--------------[ get the socket number ]---------------------------------unsigned short IpxSockAddress::get_socket() const{   if (valid_flag)  {    unsigned short sock_nbo;    MEMCPY(&sock_nbo, &address_buffer[IPXLEN], 2);    return ntohs(sock_nbo);   }  else    return 0; // don't use uninitialized memory}//------[ return the type ]----------------------------------------------addr_type IpxSockAddress::get_type() const{ return type_ipxsock; };//========================================================================//======== MACAddress Implementation =====================================//========================================================================//-----------[ syntax type ]----------------------------------------------SmiUINT32 MacAddress::get_syntax(){ return sNMP_SYNTAX_OCTETS; };//--------[ constructor, no arguments ]-----------------------------------MacAddress::MacAddress( void): Address( ){   // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = MACLEN;  smival.value.string.ptr = address_buffer;  valid_flag=FALSE;   format_output();};//-----[ MAC Address copy constructor ]---------------------------------MacAddress::MacAddress(const MacAddress &macaddr){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = MACLEN;  smival.value.string.ptr = address_buffer;  valid_flag = macaddr.valid_flag;  if (valid_flag)    MEMCPY(address_buffer, macaddr.address_buffer, MACLEN);  format_output();};//---------[ constructor with a string argument ]-------------------------MacAddress::MacAddress( const char  *inaddr):Address( ){   // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = MACLEN;  smival.value.string.ptr = address_buffer;  valid_flag = parse_address( (char *) inaddr);   format_output();}//-----[ construct a MacAddress from a GenAddress ]------------------------MacAddress::MacAddress( const GenAddress &genaddr){  // always initialize SMI info  smival.syntax = sNMP_SYNTAX_OCTETS;  smival.value.string.len = MACLEN;  smival.value.string.ptr = address_buffer;  valid_flag = FALSE;  // allow use of mac address  if (genaddr.get_type() == type_mac)  {    valid_flag = genaddr.valid();    if ( valid_flag)    {      // copy in the Mac address data      MacAddress temp_mac( (const char *) genaddr);      *this = temp_mac;    }  }  format_output();};//-----[ destructor ]--------------------------------------------------MacAddress::~MacAddress(){};//---------[ MacAddress clone ]-------------------------------------------SnmpSyntax WINFAR *MacAddress::clone() const{   return (SnmpSyntax *) new MacAddress(*this); };//------[ assignment to another ipaddress object overloaded ]--------------MacAddress& MacAddress::operator=( const MacAddress &macaddress){  // protect against assignment from itself  if ( this == &macaddress )      return *this;  valid_flag = macaddress.valid_flag;   if (valid_flag)    MEMCPY(address_buffer, macaddress.address_buffer, MACLEN);  format_output();  return *this;};//-----[ MAC Address general = operator ]---------------------------------SnmpSyntax& MacAddress::operator=( SnmpSyntax &val){  // protect against assignment from itself  if ( this == &val )      return *this;  valid_flag=0;      	// will set to TRUE if really valid  if (val.valid()){    switch (val.get_syntax()){    case sNMP_SYNTAX_OCTETS:      if (((MacAddress &)val).smival.value.string.len == MACLEN){	MEMCPY(address_buffer, ((MacAddress &)val).smival.value.string.ptr, MACLEN);	valid_flag=1;      }    break;    }  }  format_output();  return *this;};//-----[ MAC Address parse Address ]--------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -