Mercurial > hg > freeDiameter
comparison extensions/app_radgw/radius.c @ 518:2c097ed9d0ea
Fix the dump function
author | Sebastien Decugis <sdecugis@nict.go.jp> |
---|---|
date | Fri, 27 Aug 2010 11:25:46 +0900 |
parents | 1c2f5ee38039 |
children | 6994e9a3c528 |
comparison
equal
deleted
inserted
replaced
517:d5383f28b96e | 518:2c097ed9d0ea |
---|---|
221 void radius_msg_dump_attr_val(struct radius_attr_hdr *hdr) | 221 void radius_msg_dump_attr_val(struct radius_attr_hdr *hdr) |
222 { | 222 { |
223 struct radius_attr_type *attr; | 223 struct radius_attr_type *attr; |
224 int i, len; | 224 int i, len; |
225 unsigned char *pos; | 225 unsigned char *pos; |
226 u8 attrtype; | |
226 | 227 |
227 attr = radius_get_attr_type(hdr->type); | 228 attr = radius_get_attr_type(hdr->type); |
228 | 229 |
229 if (attr == NULL) | 230 if (attr == NULL) |
230 return; | 231 attrtype = RADIUS_ATTR_HEXDUMP; |
232 else | |
233 attrtype = attr->data_type; | |
231 | 234 |
232 len = hdr->length - sizeof(struct radius_attr_hdr); | 235 len = hdr->length - sizeof(struct radius_attr_hdr); |
233 pos = (unsigned char *) (hdr + 1); | 236 pos = (unsigned char *) (hdr + 1); |
234 | 237 |
235 switch (attr->data_type) { | 238 switch (attrtype) { |
236 case RADIUS_ATTR_TEXT: | 239 case RADIUS_ATTR_TEXT: |
237 printf(" Value: '"); | 240 printf(" Value: '"); |
238 for (i = 0; i < len; i++) | 241 for (i = 0; i < len; i++) |
239 print_char(pos[i]); | 242 print_char(pos[i]); |
240 printf("'\n"); | 243 printf("'\n"); |
247 printf(" Value: %s\n", inet_ntoa(addr)); | 250 printf(" Value: %s\n", inet_ntoa(addr)); |
248 } else | 251 } else |
249 printf(" Invalid IP address length %d\n", len); | 252 printf(" Invalid IP address length %d\n", len); |
250 break; | 253 break; |
251 | 254 |
252 #ifdef CONFIG_IPV6 | |
253 case RADIUS_ATTR_IPV6: | 255 case RADIUS_ATTR_IPV6: |
254 if (len == 16) { | 256 if (len == 16) { |
255 char buf[128]; | 257 char buf[128]; |
256 const char *atxt; | 258 const char *atxt; |
257 struct in6_addr *addr = (struct in6_addr *) pos; | 259 struct in6_addr *addr = (struct in6_addr *) pos; |
258 atxt = inet_ntop(AF_INET6, addr, buf, sizeof(buf)); | 260 atxt = inet_ntop(AF_INET6, addr, buf, sizeof(buf)); |
259 printf(" Value: %s\n", atxt ? atxt : "?"); | 261 printf(" Value: %s\n", atxt ? atxt : "?"); |
260 } else | 262 } else |
261 printf(" Invalid IPv6 address length %d\n", len); | 263 printf(" Invalid IPv6 address length %d\n", len); |
262 break; | 264 break; |
263 #endif /* CONFIG_IPV6 */ | |
264 | |
265 case RADIUS_ATTR_HEXDUMP: | |
266 case RADIUS_ATTR_UNDIST: | |
267 printf(" Value:"); | |
268 for (i = 0; i < len; i++) | |
269 printf(" %02x", pos[i]); | |
270 printf("\n"); | |
271 break; | |
272 | 265 |
273 case RADIUS_ATTR_INT32: | 266 case RADIUS_ATTR_INT32: |
274 if (len == 4) | 267 if (len == 4) |
275 printf(" Value: %u\n", WPA_GET_BE32(pos)); | 268 printf(" Value: %u\n", WPA_GET_BE32(pos)); |
276 else | 269 else |
277 printf(" Invalid INT32 length %d\n", len); | 270 printf(" Invalid INT32 length %d\n", len); |
278 break; | 271 break; |
279 | 272 |
273 case RADIUS_ATTR_HEXDUMP: | |
274 case RADIUS_ATTR_UNDIST: | |
280 default: | 275 default: |
276 printf(" Value:"); | |
277 for (i = 0; i < len; i++) | |
278 printf(" %02x", pos[i]); | |
279 printf("\n"); | |
281 break; | 280 break; |
282 } | 281 } |
283 } | 282 } |
284 | 283 |
285 static void radius_msg_dump_attr(struct radius_attr_hdr *hdr) | 284 static void radius_msg_dump_attr(struct radius_attr_hdr *hdr) |