comparison libfdproto/dictionary_functions.c @ 1136:140450615773

Revert changeset 1122 (ADDRESS_AVP_INCLUDE_PORT) as this will create too much interop issues. The Host-IP-Address AVP is not normally used to discover peer address, but only for validation of the addresses where a packet is received from -- which is quite useless with a connected transport connection, but anyway...
author Sebastien Decugis <sdecugis@freediameter.net>
date Thu, 16 May 2013 14:56:31 +0800
parents d4371b7aa0ff
children 1020da0ea4bc
comparison
equal deleted inserted replaced
1135:90e0382e6579 1136:140450615773
71 /* We are encoding an IP address */ 71 /* We are encoding an IP address */
72 sSA4 * sin = (sSA4 *)ss; 72 sSA4 * sin = (sSA4 *)ss;
73 73
74 AddressType = 1;/* see http://www.iana.org/assignments/address-family-numbers/ */ 74 AddressType = 1;/* see http://www.iana.org/assignments/address-family-numbers/ */
75 size = 6; /* 2 for AddressType + 4 for data */ 75 size = 6; /* 2 for AddressType + 4 for data */
76 #ifdef ADDRESS_AVP_INCLUDE_PORT
77 if (sin->sin_port != 0)
78 size += 2;
79 #endif /* ADDRESS_AVP_INCLUDE_PORT */
80 76
81 CHECK_MALLOC( buf = malloc(size) ); 77 CHECK_MALLOC( buf = malloc(size) );
82 78
83 /* may not work because of alignment: *(uint32_t *)(buf+2) = htonl(sin->sin_addr.s_addr); */ 79 /* may not work because of alignment: *(uint32_t *)(buf+2) = htonl(sin->sin_addr.s_addr); */
84 memcpy(buf + 2, &sin->sin_addr.s_addr, 4); 80 memcpy(buf + 2, &sin->sin_addr.s_addr, 4);
85
86 #ifdef ADDRESS_AVP_INCLUDE_PORT
87 if (sin->sin_port != 0)
88 memcpy(buf + 6, &sin->sin_port, 2);
89 #endif /* ADDRESS_AVP_INCLUDE_PORT */
90 } 81 }
91 break; 82 break;
92 83
93 case AF_INET6: 84 case AF_INET6:
94 { 85 {
95 /* We are encoding an IPv6 address */ 86 /* We are encoding an IPv6 address */
96 sSA6 * sin6 = (sSA6 *)ss; 87 sSA6 * sin6 = (sSA6 *)ss;
97 88
98 AddressType = 2;/* see http://www.iana.org/assignments/address-family-numbers/ */ 89 AddressType = 2;/* see http://www.iana.org/assignments/address-family-numbers/ */
99 size = 18; /* 2 for AddressType + 16 for data */ 90 size = 18; /* 2 for AddressType + 16 for data */
100 #ifdef ADDRESS_AVP_INCLUDE_PORT
101 if (sin6->sin6_port != 0)
102 size += 2;
103 #endif /* ADDRESS_AVP_INCLUDE_PORT */
104 91
105 CHECK_MALLOC( buf = malloc(size) ); 92 CHECK_MALLOC( buf = malloc(size) );
106 93
107 /* The order is already good here */ 94 /* The order is already good here */
108 memcpy(buf + 2, &sin6->sin6_addr.s6_addr, 16); 95 memcpy(buf + 2, &sin6->sin6_addr.s6_addr, 16);
109 96
110 #ifdef ADDRESS_AVP_INCLUDE_PORT
111 if (sin6->sin6_port != 0)
112 memcpy(buf + 18, &sin6->sin6_port, 2);
113 #endif /* ADDRESS_AVP_INCLUDE_PORT */
114 } 97 }
115 break; 98 break;
116 99
117 default: 100 default:
118 CHECK_PARAMS( AddressType = 0 ); 101 CHECK_PARAMS( AddressType = 0 );
141 switch (AddressType) { 124 switch (AddressType) {
142 case 1 /* IP */: 125 case 1 /* IP */:
143 { 126 {
144 sSA4 * sin = (sSA4 *)interpreted; 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 sin->sin_family = AF_INET; 131 sin->sin_family = AF_INET;
149 /* sin->sin_addr.s_addr = ntohl( * (uint32_t *) buf); -- may not work because of bad alignment */ 132 /* sin->sin_addr.s_addr = ntohl( * (uint32_t *) buf); -- may not work because of bad alignment */
150 memcpy(&sin->sin_addr.s_addr, buf, 4); 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 break; 135 break;
156 136
157 case 2 /* IP6 */: 137 case 2 /* IP6 */:
158 { 138 {
159 sSA6 * sin6 = (sSA6 *)interpreted; 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 sin6->sin6_family = AF_INET6; 143 sin6->sin6_family = AF_INET6;
164 memcpy(&sin6->sin6_addr.s6_addr, buf, 16); 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 }
170 break; 147 break;
171 148
172 default: 149 default:
"Welcome to our mercurial repository"