Changeset 1136:140450615773 in freeDiameter for libfdproto
- Timestamp:
- May 16, 2013, 3:56:31 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdproto/dictionary_functions.c
r1122 r1136 74 74 AddressType = 1;/* see http://www.iana.org/assignments/address-family-numbers/ */ 75 75 size = 6; /* 2 for AddressType + 4 for data */ 76 #ifdef ADDRESS_AVP_INCLUDE_PORT77 if (sin->sin_port != 0)78 size += 2;79 #endif /* ADDRESS_AVP_INCLUDE_PORT */80 76 81 77 CHECK_MALLOC( buf = malloc(size) ); … … 83 79 /* may not work because of alignment: *(uint32_t *)(buf+2) = htonl(sin->sin_addr.s_addr); */ 84 80 memcpy(buf + 2, &sin->sin_addr.s_addr, 4); 85 86 #ifdef ADDRESS_AVP_INCLUDE_PORT87 if (sin->sin_port != 0)88 memcpy(buf + 6, &sin->sin_port, 2);89 #endif /* ADDRESS_AVP_INCLUDE_PORT */90 81 } 91 82 break; … … 98 89 AddressType = 2;/* see http://www.iana.org/assignments/address-family-numbers/ */ 99 90 size = 18; /* 2 for AddressType + 16 for data */ 100 #ifdef ADDRESS_AVP_INCLUDE_PORT101 if (sin6->sin6_port != 0)102 size += 2;103 #endif /* ADDRESS_AVP_INCLUDE_PORT */104 91 105 92 CHECK_MALLOC( buf = malloc(size) ); … … 108 95 memcpy(buf + 2, &sin6->sin6_addr.s6_addr, 16); 109 96 110 #ifdef ADDRESS_AVP_INCLUDE_PORT111 if (sin6->sin6_port != 0)112 memcpy(buf + 18, &sin6->sin6_port, 2);113 #endif /* ADDRESS_AVP_INCLUDE_PORT */114 97 } 115 98 break; … … 144 127 sSA4 * sin = (sSA4 *)interpreted; 145 128 146 CHECK_PARAMS( avp_value->os.len >= 6 );129 CHECK_PARAMS( avp_value->os.len == 6 ); 147 130 148 131 sin->sin_family = AF_INET; 149 132 /* sin->sin_addr.s_addr = ntohl( * (uint32_t *) buf); -- may not work because of bad alignment */ 150 133 memcpy(&sin->sin_addr.s_addr, buf, 4); 151 152 if (avp_value->os.len == 8)153 memcpy(&sin->sin_port, buf + 4, 2);154 134 } 155 135 break; … … 159 139 sSA6 * sin6 = (sSA6 *)interpreted; 160 140 161 CHECK_PARAMS( avp_value->os.len >= 18 );141 CHECK_PARAMS( avp_value->os.len == 18 ); 162 142 163 143 sin6->sin6_family = AF_INET6; 164 144 memcpy(&sin6->sin6_addr.s6_addr, buf, 16); 165 166 if (avp_value->os.len == 20)167 memcpy(&sin6->sin6_port, buf + 16, 2);168 145 169 146 }
Note: See TracChangeset
for help on using the changeset viewer.