Changeset 804:c5b7d4a2cc77 in freeDiameter for libfdcore/dict_base_proto.c
- Timestamp:
- Aug 22, 2012, 7:22:46 AM (12 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/dict_base_proto.c
r740 r804 145 145 146 146 /* Dump the content of an Address AVP */ 147 static void Address_dump(union avp_value * avp_value, FILE * fstr)147 static char * Address_dump(union avp_value * avp_value) 148 148 { 149 char * ret; 150 #define STR_LEN 1024 149 151 union { 150 152 sSA sa; … … 157 159 memset(&s, 0, sizeof(s)); 158 160 161 CHECK_MALLOC_DO( ret = malloc(STR_LEN), return NULL ); 162 159 163 /* The first two octets represent the address family, http://www.iana.org/assignments/address-family-numbers/ */ 160 164 if (avp_value->os.len < 2) { 161 fd_log_debug_fstr(fstr, "[invalid length: %d]", avp_value->os.len);162 return ;165 snprintf(ret, STR_LEN, "[invalid length: %d]", avp_value->os.len); 166 return ret; 163 167 } 164 168 … … 170 174 s.sa.sa_family = AF_INET; 171 175 if (avp_value->os.len != 6) { 172 fd_log_debug_fstr(fstr, "[invalid IP length: %d]", avp_value->os.len);173 return ;176 snprintf(ret, STR_LEN, "[invalid IP length: %d]", avp_value->os.len); 177 return ret; 174 178 } 175 179 memcpy(&s.sin.sin_addr.s_addr, avp_value->os.data + 2, 4); … … 179 183 s.sa.sa_family = AF_INET6; 180 184 if (avp_value->os.len != 18) { 181 fd_log_debug_fstr(fstr, "[invalid IP6 length: %d]", avp_value->os.len);182 return ;185 snprintf(ret, STR_LEN, "[invalid IP6 length: %d]", avp_value->os.len); 186 return ret; 183 187 } 184 188 memcpy(&s.sin6.sin6_addr.s6_addr, avp_value->os.data + 2, 16); 185 189 break; 186 190 default: 187 fd_log_debug_fstr(fstr, "[unsupported family: 0x%hx]", fam);188 return ;191 snprintf(ret, STR_LEN, "[unsupported family: 0x%hx]", fam); 192 return ret; 189 193 } 190 194 191 195 { 192 char addrbuf[INET6_ADDRSTRLEN]; 193 int rc = getnameinfo(&s.sa, sSAlen(&s.sa), addrbuf, INET6_ADDRSTRLEN, NULL, 0, NI_NUMERICHOST); 196 int rc = getnameinfo(&s.sa, sSAlen(&s.sa), ret, STR_LEN, NULL, 0, NI_NUMERICHOST); 194 197 if (rc) 195 fd_log_debug_fstr(fstr, "%s", (char *)gai_strerror(rc)); 196 else 197 fd_log_debug_fstr(fstr, "%s", addrbuf); 198 198 snprintf(ret, STR_LEN, "%s", (char *)gai_strerror(rc)); 199 199 } 200 201 return ret; 200 202 } 201 203 202 static void UTF8String_dump(union avp_value * avp_value, FILE * fstr)204 static char * UTF8String_dump(union avp_value * avp_value) 203 205 { 204 size_t len = avp_value->os.len; 205 if (len > 42) 206 len = 42; /* avoid very long strings */ 207 fd_log_debug_fstr(fstr, "%.*s", len, avp_value->os.data); 206 return strndup((char *)avp_value->os.data, 42); /* avoid very long strings */ 208 207 } 209 208
Note: See TracChangeset
for help on using the changeset viewer.