Changes in / [1002:7ca81c10ba06:997:632913581c37] in freeDiameter
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
include/freeDiameter/libfdproto.h
r998 r992 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: %s",#__call__ ); \481 TRACE_DEBUG_ALL( "Check SYS: " #__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 ' %s' :\t%s", #__call__ , strerror(__err__));\485 TRACE_ERROR("ERROR: in '" #__call__ "' :\t%s", strerror(__err__));\ 486 486 __fallback__; \ 487 487 } \ … … 490 490 #define CHECK_SYS( __call__ ) { \ 491 491 int __ret__; \ 492 TRACE_DEBUG_ALL( "Check SYS: %s",#__call__ ); \492 TRACE_DEBUG_ALL( "Check SYS: " #__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 ' %s' :\t%s", #__call__ , strerror(__err__));\496 TRACE_ERROR("ERROR: in '" #__call__ "' :\t%s", 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: %s", #__call__ );\504 TRACE_DEBUG_ALL( "Check POSIX: " #__call__ ); \ 505 505 __ret__ = (__call__); \ 506 506 if (__ret__ != 0) { \ … … 508 508 __fallback1__; \ 509 509 } else { \ 510 TRACE_ERROR("ERROR: in ' %s':\t%s", #__call__, strerror(__ret__)); \510 TRACE_ERROR("ERROR: in '" #__call__ "':\t%s", 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: %s", #__call__ );\529 TRACE_DEBUG_ALL( "Check MALLOC: " #__call__ ); \ 530 530 __ret__ = (void *)( __call__ ); \ 531 531 if (__ret__ == NULL) { \ 532 532 int __err__ = errno; \ 533 TRACE_ERROR("ERROR: in ' %s':\t%s", #__call__, strerror(__err__)); \533 TRACE_ERROR("ERROR: in '" #__call__ "':\t%s", 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: %s", #__bool__ );\545 TRACE_DEBUG_ALL( "Check PARAMS: " #__bool__ ); \ 546 546 if ( ! (__bool__) ) { \ 547 TRACE_ERROR("Warning: Invalid parameter received in ' %s'", #__bool__);\547 TRACE_ERROR("Warning: Invalid parameter received in '" #__bool__ "'"); \ 548 548 __fallback__; \ 549 549 } … … 555 555 #define CHECK_FCT_DO( __call__, __fallback__ ) { \ 556 556 int __ret__; \ 557 TRACE_DEBUG_ALL( "Check FCT: %s",#__call__ ); \557 TRACE_DEBUG_ALL( "Check FCT: " #__call__ ); \ 558 558 __ret__ = (__call__); \ 559 559 if (__ret__ != 0) { \ 560 TRACE_ERROR("ERROR: in ' %s':\t%s", #__call__, strerror(__ret__)); \560 TRACE_ERROR("ERROR: in '" #__call__ "':\t%s", strerror(__ret__)); \ 561 561 __fallback__; \ 562 562 } \ -
libfdcore/cnxctx.c
r999 r982 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 hhx", serial[j]);1210 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02.2hhx", serial[j]); 1211 1211 } 1212 1212 fd_log_debug(buf); -
libfdproto/lists.c
r1001 r740 75 75 void fd_list_move_end(struct fd_list * ref, struct fd_list * senti) 76 76 { 77 struct fd_list * li;78 77 ASSERT(ref->head == ref); 79 78 ASSERT(senti->head == senti); … … 81 80 if (senti->next == senti) 82 81 return; 83 84 for (li = senti->next; li != senti; li = li->next)85 li->head = ref;86 82 87 83 senti->next->prev = ref->prev; -
libfdproto/messages.c
r1001 r995 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 307 305 308 306 /* Create answer from a request */ … … 368 366 if (! (flags & MSGFL_ANSW_NOPROXYINFO)) { 369 367 struct avp * avp; 370 struct fd_pei pei;371 struct fd_list avpcpylist = FD_LIST_INITIALIZER(avpcpylist);372 373 368 CHECK_FCT( fd_msg_browse(qry, MSG_BRW_FIRST_CHILD, &avp, NULL) ); 374 369 while (avp) { … … 381 376 size_t offset = 0; 382 377 383 /* Create a buffer with the content of the AVP. This is easier than going through the list */384 378 CHECK_FCT( fd_msg_update_length(avp) ); 385 379 CHECK_MALLOC( buf = malloc(avp->avp_public.avp_len) ); 386 380 CHECK_FCT( bufferize_avp(buf, avp->avp_public.avp_len, &offset, avp) ); 387 381 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) ); 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) ); 393 384 394 385 /* Done for this AVP */ 395 386 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);399 387 } 400 388 /* move to next AVP in the message, we can have several Proxy-Info instances */ 401 389 CHECK_FCT( fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL) ); 402 390 } 391 CHECK_FCT( fd_msg_parse_dict( ans, dict, NULL ) ); 403 392 } 404 393 … … 1569 1558 CHECK_PARAMS( avp->avp_source || avp->avp_rawdata ); 1570 1559 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 { 1560 if ( avp->avp_source != NULL ) { 1576 1561 /* the message was not parsed completely */ 1577 1562 size_t datalen = avp->avp_public.avp_len - GETAVPHDRSZ(avp->avp_public.avp_flags); 1578 1563 memcpy(&buffer[*offset], avp->avp_source, datalen); 1579 1564 *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); 1580 1569 } 1581 1570 … … 1824 1813 */ 1825 1814 1815 static int parsedict_do_chain(struct dictionary * dict, struct fd_list * head, int mandatory, struct fd_pei *error_info); 1816 1826 1817 static char error_message[256]; 1827 1818 … … 1830 1821 { 1831 1822 struct dict_avp_data dictdata; 1832 uint8_t * source;1833 1823 1834 1824 TRACE_ENTRY("%p %p %d %p", dict, avp, mandatory, error_info); … … 1923 1913 } 1924 1914 1925 source = avp->avp_source;1926 avp->avp_source = NULL;1927 1928 1915 /* Now get the value inside */ 1929 1916 switch (dictdata.avp_basetype) { … … 1932 1919 1933 1920 /* This is a grouped AVP, so let's parse the list of AVPs inside */ 1934 CHECK_FCT_DO( ret = parsebuf_list( source, avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags ), &avp->avp_chain.children),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), 1935 1922 { 1936 1923 if ((ret == EBADMSG) && (error_info)) { … … 1940 1927 error_info->pei_message = error_message; 1941 1928 } 1942 avp->avp_source = source;1943 1929 return ret; 1944 1930 } ); … … 1955 1941 error_info->pei_avp = avp; 1956 1942 } 1957 avp->avp_source = source;1958 1943 return EBADMSG; 1959 1944 } ); 1960 1945 avp->avp_storage.os.len = avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags ); 1961 CHECK_MALLOC( avp->avp_storage.os.data = os0dup( source, avp->avp_storage.os.len) );1946 CHECK_MALLOC( avp->avp_storage.os.data = os0dup(avp->avp_source, avp->avp_storage.os.len) ); 1962 1947 avp->avp_mustfreeos = 1; 1963 1948 break; 1964 1949 1965 1950 case AVP_TYPE_INTEGER32: 1966 avp->avp_storage.i32 = (int32_t)ntohl(*(uint32_t *) source);1951 avp->avp_storage.i32 = (int32_t)ntohl(*(uint32_t *)avp->avp_source); 1967 1952 break; 1968 1953 … … 1971 1956 { 1972 1957 uint64_t __stor; 1973 memcpy(&__stor, source, sizeof(__stor));1958 memcpy(&__stor, avp->avp_source, sizeof(__stor)); 1974 1959 avp->avp_storage.i64 = (int64_t)ntohll(__stor); 1975 1960 } … … 1978 1963 case AVP_TYPE_UNSIGNED32: 1979 1964 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 */ 1980 avp->avp_storage.u32 = (uint32_t)ntohl(*(uint32_t *) source);1965 avp->avp_storage.u32 = (uint32_t)ntohl(*(uint32_t *)avp->avp_source); 1981 1966 break; 1982 1967 … … 1985 1970 { 1986 1971 uint64_t __stor; 1987 memcpy(&__stor, source, sizeof(__stor));1972 memcpy(&__stor, avp->avp_source, sizeof(__stor)); 1988 1973 avp->avp_storage.u64 = (uint64_t)ntohll(__stor); 1989 1974 } -
tests/tests.h
r1000 r995 69 69 #define FAILTEST( message... ){ \ 70 70 TRACE_ERROR(message); \ 71 TRACE_ ERROR("FAILED: %s ", __STRIPPED_FILE__); \71 TRACE_NOTICE("Test %s failed", __FILE__); \ 72 72 exit(FAIL); \ 73 73 } … … 75 75 /* Define the macro to pass a test */ 76 76 #define PASSTEST( ){ \ 77 TRACE_NOTICE(" PASS: %s", __STRIPPED_FILE__); \77 TRACE_NOTICE("Test %s passed", __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_NOTICE("CHECK( %s == %s )", \ 92 #_assert, \ 93 #_val); \ 91 TRACE_DEBUG(INFO, \ 92 "%s:%-4d: CHECK( " #_assert " == "\ 93 #_val " )", \ 94 __FILE__, \ 95 __LINE__); \ 94 96 }{ \ 95 97 __typeof__ (_val) __ret = (_assert); \ 96 98 if (__ret != (_val)) { \ 97 99 FAILTEST( "%s:%d: CHECK FAILED : %s == %lx != %lx", \ 98 __ STRIPPED_FILE__,\100 __FILE__, \ 99 101 __LINE__, \ 100 102 #_assert, \ … … 197 199 CHECK( 0, fd_libproto_init() ); 198 200 199 fd_log_threadname( fname);201 fd_log_threadname(basename(fname)); 200 202 201 203 /* Parse the command line */ … … 227 229 return; 228 230 } 229 #define INIT_FD() test_init(argc, argv, __ STRIPPED_FILE__)231 #define INIT_FD() test_init(argc, argv, __FILE__); 230 232 231 233 #endif /* _TESTS_H */
Note: See TracChangeset
for help on using the changeset viewer.