Changes in / [997:632913581c37:1002:7ca81c10ba06] in freeDiameter
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
include/freeDiameter/libfdproto.h
r992 r998 312 312 313 313 /* Helper for tracing the CHECK_* macros below -- very very verbose code execution! */ 314 #define TRACE_DEBUG_ALL( str ) \314 #define TRACE_DEBUG_ALL( str... ) \ 315 315 TRACE_DEBUG(CALL, str ); 316 316 … … 479 479 #define CHECK_SYS_DO( __call__, __fallback__ ) { \ 480 480 int __ret__; \ 481 TRACE_DEBUG_ALL( "Check SYS: "#__call__ ); \481 TRACE_DEBUG_ALL( "Check SYS: %s", #__call__ ); \ 482 482 __ret__ = (__call__); \ 483 483 if (__ret__ < 0) { \ 484 484 int __err__ = errno; /* We may handle EINTR here */ \ 485 TRACE_ERROR("ERROR: in ' " #__call__ "' :\t%s", strerror(__err__));\485 TRACE_ERROR("ERROR: in '%s' :\t%s", #__call__ , strerror(__err__)); \ 486 486 __fallback__; \ 487 487 } \ … … 490 490 #define CHECK_SYS( __call__ ) { \ 491 491 int __ret__; \ 492 TRACE_DEBUG_ALL( "Check SYS: "#__call__ ); \492 TRACE_DEBUG_ALL( "Check SYS: %s", #__call__ ); \ 493 493 __ret__ = (__call__); \ 494 494 if (__ret__ < 0) { \ 495 495 int __err__ = errno; /* We may handle EINTR here */ \ 496 TRACE_ERROR("ERROR: in ' " #__call__ "' :\t%s", strerror(__err__));\496 TRACE_ERROR("ERROR: in '%s' :\t%s", #__call__ , strerror(__err__)); \ 497 497 return __err__; \ 498 498 } \ … … 502 502 #define CHECK_POSIX_DO2( __call__, __speval__, __fallback1__, __fallback2__ ) { \ 503 503 int __ret__; \ 504 TRACE_DEBUG_ALL( "Check POSIX: " #__call__ );\504 TRACE_DEBUG_ALL( "Check POSIX: %s", #__call__ ); \ 505 505 __ret__ = (__call__); \ 506 506 if (__ret__ != 0) { \ … … 508 508 __fallback1__; \ 509 509 } else { \ 510 TRACE_ERROR("ERROR: in ' " #__call__ "':\t%s", strerror(__ret__)); \510 TRACE_ERROR("ERROR: in '%s':\t%s", #__call__, strerror(__ret__)); \ 511 511 __fallback2__; \ 512 512 } \ … … 527 527 #define CHECK_MALLOC_DO( __call__, __fallback__ ) { \ 528 528 void * __ret__; \ 529 TRACE_DEBUG_ALL( "Check MALLOC: " #__call__ );\529 TRACE_DEBUG_ALL( "Check MALLOC: %s", #__call__ ); \ 530 530 __ret__ = (void *)( __call__ ); \ 531 531 if (__ret__ == NULL) { \ 532 532 int __err__ = errno; \ 533 TRACE_ERROR("ERROR: in ' " #__call__ "':\t%s", strerror(__err__)); \533 TRACE_ERROR("ERROR: in '%s':\t%s", #__call__, strerror(__err__)); \ 534 534 __fallback__; \ 535 535 } \ … … 543 543 /* Check parameters at function entry, execute fallback on error */ 544 544 #define CHECK_PARAMS_DO( __bool__, __fallback__ ) \ 545 TRACE_DEBUG_ALL( "Check PARAMS: " #__bool__ );\545 TRACE_DEBUG_ALL( "Check PARAMS: %s", #__bool__ ); \ 546 546 if ( ! (__bool__) ) { \ 547 TRACE_ERROR("Warning: Invalid parameter received in ' " #__bool__ "'");\547 TRACE_ERROR("Warning: Invalid parameter received in '%s'", #__bool__); \ 548 548 __fallback__; \ 549 549 } … … 555 555 #define CHECK_FCT_DO( __call__, __fallback__ ) { \ 556 556 int __ret__; \ 557 TRACE_DEBUG_ALL( "Check FCT: "#__call__ ); \557 TRACE_DEBUG_ALL( "Check FCT: %s", #__call__ ); \ 558 558 __ret__ = (__call__); \ 559 559 if (__ret__ != 0) { \ 560 TRACE_ERROR("ERROR: in ' " #__call__ "':\t%s", strerror(__ret__)); \560 TRACE_ERROR("ERROR: in '%s':\t%s", #__call__, strerror(__ret__)); \ 561 561 __fallback__; \ 562 562 } \ -
libfdcore/cnxctx.c
r982 r999 1208 1208 snprintf(buf, sizeof(buf), "\t - Certificate serial number: "); 1209 1209 for (j = 0; j < size; j++) { 1210 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02 .2hhx", serial[j]);1210 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02hhx", serial[j]); 1211 1211 } 1212 1212 fd_log_debug(buf); -
libfdproto/lists.c
r740 r1001 75 75 void fd_list_move_end(struct fd_list * ref, struct fd_list * senti) 76 76 { 77 struct fd_list * li; 77 78 ASSERT(ref->head == ref); 78 79 ASSERT(senti->head == senti); … … 80 81 if (senti->next == senti) 81 82 return; 83 84 for (li = senti->next; li != senti; li = li->next) 85 li->head = ref; 82 86 83 87 senti->next->prev = ref->prev; -
libfdproto/messages.c
r995 r1001 303 303 static int bufferize_avp(unsigned char * buffer, size_t buflen, size_t * offset, struct avp * avp); 304 304 static int parsebuf_list(unsigned char * buf, size_t buflen, struct fd_list * head); 305 static int parsedict_do_chain(struct dictionary * dict, struct fd_list * head, int mandatory, struct fd_pei *error_info); 306 305 307 306 308 /* Create answer from a request */ … … 366 368 if (! (flags & MSGFL_ANSW_NOPROXYINFO)) { 367 369 struct avp * avp; 370 struct fd_pei pei; 371 struct fd_list avpcpylist = FD_LIST_INITIALIZER(avpcpylist); 372 368 373 CHECK_FCT( fd_msg_browse(qry, MSG_BRW_FIRST_CHILD, &avp, NULL) ); 369 374 while (avp) { … … 376 381 size_t offset = 0; 377 382 383 /* Create a buffer with the content of the AVP. This is easier than going through the list */ 378 384 CHECK_FCT( fd_msg_update_length(avp) ); 379 385 CHECK_MALLOC( buf = malloc(avp->avp_public.avp_len) ); 380 386 CHECK_FCT( bufferize_avp(buf, avp->avp_public.avp_len, &offset, avp) ); 381 387 382 /* Now we directly parse this buffer into the new message list */ 383 CHECK_FCT( parsebuf_list(buf, avp->avp_public.avp_len, &ans->msg_chain.children) ); 388 /* Now we parse this buffer to create a copy AVP */ 389 CHECK_FCT( parsebuf_list(buf, avp->avp_public.avp_len, &avpcpylist) ); 390 391 /* Parse dictionary objects now to remove the dependency on the buffer */ 392 CHECK_FCT( parsedict_do_chain(dict, &avpcpylist, 0, &pei) ); 384 393 385 394 /* Done for this AVP */ 386 395 free(buf); 396 397 /* We move this AVP now so that we do not parse again in next loop */ 398 fd_list_move_end(&ans->msg_chain.children, &avpcpylist); 387 399 } 388 400 /* move to next AVP in the message, we can have several Proxy-Info instances */ 389 401 CHECK_FCT( fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL) ); 390 402 } 391 CHECK_FCT( fd_msg_parse_dict( ans, dict, NULL ) );392 403 } 393 404 … … 1558 1569 CHECK_PARAMS( avp->avp_source || avp->avp_rawdata ); 1559 1570 1560 if ( avp->avp_source != NULL ) { 1571 if ( avp->avp_rawdata != NULL ) { 1572 /* the content was stored in rawdata */ 1573 memcpy(&buffer[*offset], avp->avp_rawdata, avp->avp_rawlen); 1574 *offset += PAD4(avp->avp_rawlen); 1575 } else { 1561 1576 /* the message was not parsed completely */ 1562 1577 size_t datalen = avp->avp_public.avp_len - GETAVPHDRSZ(avp->avp_public.avp_flags); 1563 1578 memcpy(&buffer[*offset], avp->avp_source, datalen); 1564 1579 *offset += PAD4(datalen); 1565 } else {1566 /* the content was stored in rawdata */1567 memcpy(&buffer[*offset], avp->avp_rawdata, avp->avp_rawlen);1568 *offset += PAD4(avp->avp_rawlen);1569 1580 } 1570 1581 … … 1813 1824 */ 1814 1825 1815 static int parsedict_do_chain(struct dictionary * dict, struct fd_list * head, int mandatory, struct fd_pei *error_info);1816 1817 1826 static char error_message[256]; 1818 1827 … … 1821 1830 { 1822 1831 struct dict_avp_data dictdata; 1832 uint8_t * source; 1823 1833 1824 1834 TRACE_ENTRY("%p %p %d %p", dict, avp, mandatory, error_info); … … 1913 1923 } 1914 1924 1925 source = avp->avp_source; 1926 avp->avp_source = NULL; 1927 1915 1928 /* Now get the value inside */ 1916 1929 switch (dictdata.avp_basetype) { … … 1919 1932 1920 1933 /* This is a grouped AVP, so let's parse the list of AVPs inside */ 1921 CHECK_FCT_DO( ret = parsebuf_list( avp->avp_source, avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags ), &avp->avp_chain.children),1934 CHECK_FCT_DO( ret = parsebuf_list(source, avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags ), &avp->avp_chain.children), 1922 1935 { 1923 1936 if ((ret == EBADMSG) && (error_info)) { … … 1927 1940 error_info->pei_message = error_message; 1928 1941 } 1942 avp->avp_source = source; 1929 1943 return ret; 1930 1944 } ); … … 1941 1955 error_info->pei_avp = avp; 1942 1956 } 1957 avp->avp_source = source; 1943 1958 return EBADMSG; 1944 1959 } ); 1945 1960 avp->avp_storage.os.len = avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags ); 1946 CHECK_MALLOC( avp->avp_storage.os.data = os0dup( avp->avp_source, avp->avp_storage.os.len) );1961 CHECK_MALLOC( avp->avp_storage.os.data = os0dup(source, avp->avp_storage.os.len) ); 1947 1962 avp->avp_mustfreeos = 1; 1948 1963 break; 1949 1964 1950 1965 case AVP_TYPE_INTEGER32: 1951 avp->avp_storage.i32 = (int32_t)ntohl(*(uint32_t *) avp->avp_source);1966 avp->avp_storage.i32 = (int32_t)ntohl(*(uint32_t *)source); 1952 1967 break; 1953 1968 … … 1956 1971 { 1957 1972 uint64_t __stor; 1958 memcpy(&__stor, avp->avp_source, sizeof(__stor));1973 memcpy(&__stor, source, sizeof(__stor)); 1959 1974 avp->avp_storage.i64 = (int64_t)ntohll(__stor); 1960 1975 } … … 1963 1978 case AVP_TYPE_UNSIGNED32: 1964 1979 case AVP_TYPE_FLOAT32: /* For float, we must not cast, or the value is changed. Instead we use implicit cast by changing the member of the union */ 1965 avp->avp_storage.u32 = (uint32_t)ntohl(*(uint32_t *) avp->avp_source);1980 avp->avp_storage.u32 = (uint32_t)ntohl(*(uint32_t *)source); 1966 1981 break; 1967 1982 … … 1970 1985 { 1971 1986 uint64_t __stor; 1972 memcpy(&__stor, avp->avp_source, sizeof(__stor));1987 memcpy(&__stor, source, sizeof(__stor)); 1973 1988 avp->avp_storage.u64 = (uint64_t)ntohll(__stor); 1974 1989 } -
tests/tests.h
r995 r1000 69 69 #define FAILTEST( message... ){ \ 70 70 TRACE_ERROR(message); \ 71 TRACE_ NOTICE("Test %s failed", __FILE__); \71 TRACE_ERROR("FAILED: %s ", __STRIPPED_FILE__); \ 72 72 exit(FAIL); \ 73 73 } … … 75 75 /* Define the macro to pass a test */ 76 76 #define PASSTEST( ){ \ 77 TRACE_NOTICE(" Test %s passed", __FILE__); \77 TRACE_NOTICE("PASS: %s", __STRIPPED_FILE__); \ 78 78 (void)fd_core_shutdown(); \ 79 79 (void)fd_core_wait_shutdown_complete(); \ … … 89 89 #define CHECK( _val, _assert ){ \ 90 90 if (test_verbo > 0) { \ 91 TRACE_DEBUG(INFO, \ 92 "%s:%-4d: CHECK( " #_assert " == "\ 93 #_val " )", \ 94 __FILE__, \ 95 __LINE__); \ 91 TRACE_NOTICE("CHECK( %s == %s )", \ 92 #_assert, \ 93 #_val); \ 96 94 }{ \ 97 95 __typeof__ (_val) __ret = (_assert); \ 98 96 if (__ret != (_val)) { \ 99 97 FAILTEST( "%s:%d: CHECK FAILED : %s == %lx != %lx", \ 100 __ FILE__,\98 __STRIPPED_FILE__, \ 101 99 __LINE__, \ 102 100 #_assert, \ … … 199 197 CHECK( 0, fd_libproto_init() ); 200 198 201 fd_log_threadname( basename(fname));199 fd_log_threadname(fname); 202 200 203 201 /* Parse the command line */ … … 229 227 return; 230 228 } 231 #define INIT_FD() test_init(argc, argv, __ FILE__);229 #define INIT_FD() test_init(argc, argv, __STRIPPED_FILE__) 232 230 233 231 #endif /* _TESTS_H */
Note: See TracChangeset
for help on using the changeset viewer.