Changeset 961:d95cd3ca9e8d in freeDiameter for libfdproto
- Timestamp:
- Mar 7, 2013, 4:09:54 AM (11 years ago)
- Branch:
- default
- Parents:
- 960:f39fa6cd86e0 (diff), 933:04f590da5821 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Phase:
- public
- Location:
- libfdproto
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdproto/dictionary.c
r928 r961 1278 1278 _OBINFO(obj).dump_data(&obj->data); 1279 1279 1280 fd_log_debug("\n");1281 1282 1280 if (depth) { 1283 1281 int i; … … 1470 1468 1471 1469 /* Done! */ 1472 CHECK_FCT( dump_add_str(outstr, offset, outlen, "\n") );1473 1470 return 0; 1474 1471 } … … 1725 1722 switch (type) { 1726 1723 case DICT_VENDOR: 1724 TRACE_DEBUG(FULL, "Vendor %s already in dictionary", new->data.vendor.vendor_name); 1727 1725 /* if we are here, it means the two vendors id are identical */ 1728 1726 if (fd_os_cmp(locref->data.vendor.vendor_name, locref->datastr_len, … … 1736 1734 1737 1735 case DICT_APPLICATION: 1736 TRACE_DEBUG(FULL, "Application %s already in dictionary", new->data.application.application_name); 1738 1737 /* got same id */ 1739 1738 if (fd_os_cmp(locref->data.application.application_name, locref->datastr_len, … … 1746 1745 1747 1746 case DICT_TYPE: 1747 TRACE_DEBUG(FULL, "Type %s already in dictionary", new->data.type.type_name); 1748 1748 /* got same name */ 1749 1749 if (locref->data.type.type_base != new->data.type.type_base) { … … 1768 1768 1769 1769 case DICT_ENUMVAL: 1770 TRACE_DEBUG(FULL, "Enum %s already in dictionary", new->data.enumval.enum_name); 1770 1771 /* got either same name or same value. We check that both are true */ 1771 1772 if (order_enum_by_name(locref, new)) { … … 1781 1782 1782 1783 case DICT_AVP: 1784 TRACE_DEBUG(FULL, "AVP %s already in dictionary", new->data.avp.avp_name); 1783 1785 /* got either same name or code */ 1784 1786 if (order_avp_by_code(locref, new)) { … … 1810 1812 1811 1813 case DICT_COMMAND: 1814 TRACE_DEBUG(FULL, "Command %s already in dictionary", new->data.cmd.cmd_name); 1812 1815 /* We got either same name, or same code + R flag */ 1813 1816 if (order_cmd_by_name(locref, new)) { -
libfdproto/dictionary.c
r952 r961 3 3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * 4 4 * * 5 * Copyright (c) 201 2, WIDE Project and NICT *5 * Copyright (c) 2013, WIDE Project and NICT * 6 6 * All rights reserved. * 7 7 * * -
libfdproto/log.c
r928 r961 44 44 int fd_g_debug_lvl = INFO; 45 45 46 static void fd_internal_logger( int, const char *, va_list ); 47 46 48 /* These may be used to pass specific debug requests via the command-line parameters */ 47 49 char * fd_debug_one_function = NULL; … … 53 55 54 56 /* Allow passing of the log and debug information from base stack to extensions */ 55 void (*fd_ external_logger)( const char * format, va_list *args ) = NULL;57 void (*fd_logger)( int loglevel, const char * format, va_list args ) = fd_internal_logger; 56 58 57 /* Register an dexternal call back for tracing and debug */58 int fd_log_handler_register( void (*logger)( const char * format, va_list *args))59 /* Register an external call back for tracing and debug */ 60 int fd_log_handler_register( void (*logger)(int loglevel, const char * format, va_list args) ) 59 61 { 60 62 CHECK_PARAMS( logger ); 61 63 62 if ( fd_ external_logger != NULL)64 if ( fd_logger != fd_internal_logger ) 63 65 { 64 66 return EALREADY; /* only one registration allowed */ … … 66 68 else 67 69 { 68 fd_ external_logger = logger;70 fd_logger = logger; 69 71 } 72 70 73 return 0; 71 74 } … … 74 77 int fd_log_handler_unregister ( void ) 75 78 { 76 fd_ external_logger = NULL;79 fd_logger = fd_internal_logger; 77 80 return 0; /* Successfull in all cases. */ 78 81 } … … 83 86 } 84 87 88 89 static void fd_internal_logger( int loglevel, const char *format, va_list ap ) 90 { 91 char buf[25]; 92 FILE *fstr = fd_g_debug_fstr ?: stdout; 93 94 /* logging has been decided by macros outside already */ 95 96 /* add timestamp */ 97 fprintf(fd_g_debug_fstr, "%s\t", fd_log_time(NULL, buf, sizeof(buf))); 98 vfprintf(fd_g_debug_fstr, format, ap); 99 if (format && (format[strlen(format)-1] != '\n')) { 100 fprintf(fd_g_debug_fstr, "\n"); 101 } 102 fflush(fd_g_debug_fstr); 103 } 104 85 105 /* Log a debug message */ 86 void fd_log _debug_fstr ( FILE * fstr, const char * format, ... )106 void fd_log ( int loglevel, const char * format, ... ) 87 107 { 88 108 va_list ap; … … 93 113 94 114 va_start(ap, format); 95 if ( fd_external_logger != NULL ) 96 { 97 fd_external_logger( format, &ap ); 98 } 99 else 100 { 101 vfprintf( fstr ?: stdout, format, ap); 102 fflush(fstr ?: stdout); 103 } 115 fd_logger(loglevel, format, ap); 104 116 va_end(ap); 105 117 … … 107 119 108 120 (void)pthread_mutex_unlock(&fd_log_lock); 121 } 122 123 /* Log debug message to file. */ 124 void fd_log_debug_fstr( FILE * fstr, const char * format, ... ) 125 { 126 va_list ap; 127 128 va_start(ap, format); 129 vfprintf(fstr, format, ap); 130 va_end(ap); 109 131 } 110 132 -
libfdproto/log.c
r945 r961 3 3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * 4 4 * * 5 * Copyright (c) 201 2, WIDE Project and NICT *5 * Copyright (c) 2013, WIDE Project and NICT * 6 6 * All rights reserved. * 7 7 * * -
libfdproto/messages.c
r928 r961 683 683 struct tm tm; 684 684 685 CHECK_FCT( dump_add_str(outstr, offset, outlen, "%*sMSG: %p \n", INOBJHDRVAL, msg) );685 CHECK_FCT( dump_add_str(outstr, offset, outlen, "%*sMSG: %p|", INOBJHDRVAL, msg) ); 686 686 687 687 if (!CHECK_MSG(msg)) { 688 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "INVALID! \n", INOBJHDRVAL) );688 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "INVALID!", INOBJHDRVAL) ); 689 689 return 0; 690 690 } … … 693 693 tsoffset += strftime(buftime + tsoffset, sizeof(buftime) - tsoffset, "%D,%T", localtime_r( &msg->msg_ts_rcv.tv_sec , &tm )); 694 694 tsoffset += snprintf(buftime + tsoffset, sizeof(buftime) - tsoffset, ".%6.6ld", msg->msg_ts_rcv.tv_nsec / 1000); 695 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "Received: %s \n", INOBJHDRVAL, buftime) );695 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "Received: %s|", INOBJHDRVAL, buftime) ); 696 696 } 697 697 if ((msg->msg_ts_sent.tv_sec != 0) || (msg->msg_ts_sent.tv_nsec != 0)) { 698 698 tsoffset += strftime(buftime + tsoffset, sizeof(buftime) - tsoffset, "%D,%T", localtime_r( &msg->msg_ts_sent.tv_sec , &tm )); 699 699 tsoffset += snprintf(buftime + tsoffset, sizeof(buftime) - tsoffset, ".%6.6ld", msg->msg_ts_sent.tv_nsec / 1000); 700 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "Sent : %s \n", INOBJHDRVAL, buftime) );700 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "Sent : %s|", INOBJHDRVAL, buftime) ); 701 701 } 702 702 703 703 if (!msg->msg_model) { 704 704 705 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(no model) \n", INOBJHDRVAL) );705 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(no model)|", INOBJHDRVAL) ); 706 706 707 707 } else { … … 711 711 ret = fd_dict_gettype(msg->msg_model, &dicttype); 712 712 if (ret || (dicttype != DICT_COMMAND)) { 713 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(invalid model: %d %d) \n", INOBJHDRVAL, ret, dicttype) );713 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(invalid model: %d %d)|", INOBJHDRVAL, ret, dicttype) ); 714 714 goto public; 715 715 } 716 716 ret = fd_dict_getval(msg->msg_model, &dictdata); 717 717 if (ret != 0) { 718 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(error getting model data: %s) \n", INOBJHDRVAL, strerror(ret)) );718 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(error getting model data: %s)|", INOBJHDRVAL, strerror(ret)) ); 719 719 goto public; 720 720 } 721 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "model : v/m:" DUMP_CMDFL_str "/" DUMP_CMDFL_str ", %u \"%s\" \n", INOBJHDRVAL,721 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "model : v/m:" DUMP_CMDFL_str "/" DUMP_CMDFL_str ", %u \"%s\"|", INOBJHDRVAL, 722 722 DUMP_CMDFL_val(dictdata.cmd_flag_val), DUMP_CMDFL_val(dictdata.cmd_flag_mask), dictdata.cmd_code, dictdata.cmd_name) ); 723 723 } 724 724 public: 725 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "public: V:%d L:%d fl:" DUMP_CMDFL_str " CC:%u A:%d hi:%x ei:%x \n", INOBJHDRVAL,725 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "public: V:%d L:%d fl:" DUMP_CMDFL_str " CC:%u A:%d hi:%x ei:%x|", INOBJHDRVAL, 726 726 msg->msg_public.msg_version, 727 727 msg->msg_public.msg_length, … … 732 732 msg->msg_public.msg_eteid 733 733 ) ); 734 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: rwb:%p rt:%d cb:%p(%p) qry:%p asso:%d sess:%p src:%s(%zd) \n",734 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: rwb:%p rt:%d cb:%p(%p) qry:%p asso:%d sess:%p src:%s(%zd)|", 735 735 INOBJHDRVAL, msg->msg_rawbuffer, msg->msg_routable, msg->msg_cb.fct, msg->msg_cb.data, msg->msg_query, msg->msg_associated, msg->msg_sess, msg->msg_src_id?:"(nil)", msg->msg_src_id_len) ); 736 736 return 0; … … 743 743 744 744 if (!CHECK_AVP(avp)) { 745 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "INVALID! \n", INOBJHDRVAL) );745 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "INVALID!", INOBJHDRVAL) ); 746 746 return 0; 747 747 } … … 749 749 if (!avp->avp_model) { 750 750 751 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(no model resolved) \n", INOBJHDRVAL) );751 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(no model resolved)|", INOBJHDRVAL) ); 752 752 753 753 } else { … … 757 757 ret = fd_dict_gettype(avp->avp_model, &dicttype); 758 758 if (ret || (dicttype != DICT_AVP)) { 759 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(invalid model: %d %d) \n", INOBJHDRVAL, ret, dicttype) );759 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(invalid model: %d %d)|", INOBJHDRVAL, ret, dicttype) ); 760 760 goto public; 761 761 } 762 762 ret = fd_dict_getval(avp->avp_model, &dictdata); 763 763 if (ret != 0) { 764 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(error getting model data: %s) \n", INOBJHDRVAL, strerror(ret)) );764 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(error getting model data: %s)|", INOBJHDRVAL, strerror(ret)) ); 765 765 goto public; 766 766 } 767 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "model : v/m:" DUMP_AVPFL_str "/" DUMP_AVPFL_str ", %12s, %u \"%s\" \n", INOBJHDRVAL,767 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "model : v/m:" DUMP_AVPFL_str "/" DUMP_AVPFL_str ", %12s, %u \"%s\"|", INOBJHDRVAL, 768 768 DUMP_AVPFL_val(dictdata.avp_flag_val), 769 769 DUMP_AVPFL_val(dictdata.avp_flag_mask), … … 773 773 } 774 774 public: 775 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "public: C:%u fl:" DUMP_AVPFL_str " L:%d V:%u data:@%p \n", INOBJHDRVAL,775 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "public: C:%u fl:" DUMP_AVPFL_str " L:%d V:%u data:@%p|", INOBJHDRVAL, 776 776 avp->avp_public.avp_code, 777 777 DUMP_AVPFL_val(avp->avp_public.avp_flags), … … 783 783 if (avp->avp_public.avp_value) { 784 784 if (!avp->avp_model) { 785 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(data set but no model: ERROR) \n", INOBJHDRVAL) );785 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "(data set but no model: ERROR)|", INOBJHDRVAL) ); 786 786 } else { 787 787 CHECK_FCT( fd_dict_dump_avp_value(avp->avp_public.avp_value, avp->avp_model, indent, outstr, offset, outlen) ); … … 789 789 } 790 790 791 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: src:%p mf:%d raw:%p(%d) \n", INOBJHDRVAL, avp->avp_source, avp->avp_mustfreeos, avp->avp_rawdata, avp->avp_rawlen) );791 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: src:%p mf:%d raw:%p(%d)|", INOBJHDRVAL, avp->avp_source, avp->avp_mustfreeos, avp->avp_rawdata, avp->avp_rawlen) ); 792 792 return 0; 793 793 } … … 880 880 /* now really output this in one shot, so it is not interrupted */ 881 881 TRACE_DEBUG(level, "------ Dumping object %p (w)-------", obj); 882 fd_log_debug_fstr(fd_g_debug_fstr, "%s", outstr);882 TRACE_DEBUG(level, "%s", outstr); 883 883 TRACE_DEBUG(level, "------ /end of object %p -------", obj); 884 884 … … 896 896 fd_log_debug_fstr(fd_g_debug_fstr, "Error while dumping %p\n", obj) ); 897 897 TRACE_DEBUG(level, "------ Dumping object %p (s)-------", obj); 898 fd_log_debug_fstr(fd_g_debug_fstr, "%s", outstr);898 TRACE_DEBUG(level, "%s", outstr); 899 899 TRACE_DEBUG(level, "------ /end of object %p -------", obj); 900 900 free(outstr); -
libfdproto/messages.c
r951 r961 3 3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * 4 4 * * 5 * Copyright (c) 201 2, WIDE Project and NICT *5 * Copyright (c) 2013, WIDE Project and NICT * 6 6 * All rights reserved. * 7 7 * *
Note: See TracChangeset
for help on using the changeset viewer.