--------------------- PatchSet 6159 Date: 2007/11/21 08:16:00 Author: rmartinez Branch: squid3-ipv6 Tag: (none) Log: Restoring transiently redundant code Members: src/snmp_core.cc:1.10.8.26->1.10.8.27 Index: squid3/src/snmp_core.cc =================================================================== RCS file: /cvsroot/squid-sf//squid3/src/snmp_core.cc,v retrieving revision 1.10.8.26 retrieving revision 1.10.8.27 diff -u -r1.10.8.26 -r1.10.8.27 --- squid3/src/snmp_core.cc 20 Nov 2007 19:31:23 -0000 1.10.8.26 +++ squid3/src/snmp_core.cc 21 Nov 2007 08:16:00 -0000 1.10.8.27 @@ -1,6 +1,6 @@ /* - * $Id: snmp_core.cc,v 1.10.8.26 2007/11/20 19:31:23 rmartinez Exp $ + * $Id: snmp_core.cc,v 1.10.8.27 2007/11/21 08:16:00 rmartinez Exp $ * * DEBUG: section 49 SNMP support * AUTHOR: Glenn Chisholm @@ -1152,19 +1152,34 @@ void addr2oid(IPAddress &addr, oid * Dest) { - struct in_addr *iaddr = (struct in_addr*)&(Dest[1]); + u_int i ; + u_char *cp = NULL; + struct in_addr iaddr; #if USE_IPV6 - struct in6_addr *i6addr = (struct in6_addr*)&(Dest[1]); - if(addr.IsIPv4()) { -#endif - Dest[0] = INETADDRESSTYPE_IPV4; - addr.GetInAddr(*iaddr); -#if USE_IPV6 - } else { - Dest[0] = INETADDRESSTYPE_IPV6; - addr.GetInAddr(*i6addr); + struct in6_addr i6addr; + oid code = addr.IsIPv4()? INETADDRESSTYPE_IPV4 : INETADDRESSTYPE_IPV6 ; + u_int size = (code == INETADDRESSTYPE_IPV4) ? sizeof(struct in_addr):sizeof(struct in6_addr); +#else + oid code = INETADDRESSTYPE_IPV4 ; + u_int size = sizeof(struct in_addr) ; +#endif /* USE_IPV6 */ + Dest[0] = code ; + if ( code == INETADDRESSTYPE_IPV4 ) { + addr.GetInAddr(iaddr); + cp = (u_char *) &(iaddr.s_addr); } +#if USE_IPV6 + else + { + addr.GetInAddr(i6addr); + cp = (u_char *) &i6addr; + } #endif + for ( i=0 ; i < size ; i++) + { + // OID's are in network order + Dest[1+i] = *cp++; + } } /* @@ -1179,14 +1194,30 @@ oid2addr(oid * id, IPAddress &addr) { u_int code; + u_int size; + struct in_addr iaddr; code = id[0]; + u_int i; + u_char *cp; #if USE_IPV6 - if (code == INETADDRESSTYPE_IPV4) -#endif - addr = (* ((struct in_addr *)&id[1])); + struct in6_addr i6addr; + size = (code == INETADDRESSTYPE_IPV4) ? sizeof(struct in_addr):sizeof(struct in6_addr); + cp = ( code == INETADDRESSTYPE_IPV4 ) ? (u_char *) &(iaddr.s_addr) : (u_char *) &(i6addr) ; +#else + size = sizeof(struct in_addr) ; + cp = (u_char *) &(iaddr.s_addr); +#endif /* USE_IPV6 */ + for(i=0 ; i