Navigation


Changeset 961:d95cd3ca9e8d in freeDiameter for libfdproto


Ignore:
Timestamp:
Mar 7, 2013, 4:09:54 AM (11 years ago)
Author:
Thomas Klausner <tk@giga.or.at>
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
Message:

merge latest 1.1 branch (one commit post 1.1.6)

Location:
libfdproto
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • libfdproto/dictionary.c

    r928 r961  
    12781278                _OBINFO(obj).dump_data(&obj->data);
    12791279       
    1280         fd_log_debug("\n");
    1281        
    12821280        if (depth) {
    12831281                int i;
     
    14701468       
    14711469        /* Done! */
    1472         CHECK_FCT( dump_add_str(outstr, offset, outlen, "\n") );
    14731470        return 0;
    14741471}
     
    17251722                switch (type) {
    17261723                        case DICT_VENDOR:
     1724                                TRACE_DEBUG(FULL, "Vendor %s already in dictionary", new->data.vendor.vendor_name);
    17271725                                /* if we are here, it means the two vendors id are identical */
    17281726                                if (fd_os_cmp(locref->data.vendor.vendor_name, locref->datastr_len,
     
    17361734
    17371735                        case DICT_APPLICATION:
     1736                                TRACE_DEBUG(FULL, "Application %s already in dictionary", new->data.application.application_name);
    17381737                                /* got same id */
    17391738                                if (fd_os_cmp(locref->data.application.application_name, locref->datastr_len,
     
    17461745
    17471746                        case DICT_TYPE:
     1747                                TRACE_DEBUG(FULL, "Type %s already in dictionary", new->data.type.type_name);
    17481748                                /* got same name */
    17491749                                if (locref->data.type.type_base != new->data.type.type_base) {
     
    17681768
    17691769                        case DICT_ENUMVAL:
     1770                                TRACE_DEBUG(FULL, "Enum %s already in dictionary", new->data.enumval.enum_name);
    17701771                                /* got either same name or same value. We check that both are true */
    17711772                                if (order_enum_by_name(locref, new)) {
     
    17811782
    17821783                        case DICT_AVP:
     1784                                TRACE_DEBUG(FULL, "AVP %s already in dictionary", new->data.avp.avp_name);
    17831785                                /* got either same name or code */
    17841786                                if (order_avp_by_code(locref, new)) {
     
    18101812
    18111813                        case DICT_COMMAND:
     1814                                TRACE_DEBUG(FULL, "Command %s already in dictionary", new->data.cmd.cmd_name);
    18121815                                /* We got either same name, or same code + R flag */
    18131816                                if (order_cmd_by_name(locref, new)) {
  • libfdproto/dictionary.c

    r952 r961  
    33* Author: Sebastien Decugis <sdecugis@freediameter.net>                                                  *
    44*                                                                                                        *
    5 * Copyright (c) 2012, WIDE Project and NICT                                                              *
     5* Copyright (c) 2013, WIDE Project and NICT                                                              *
    66* All rights reserved.                                                                                   *
    77*                                                                                                        *
  • libfdproto/log.c

    r928 r961  
    4444int fd_g_debug_lvl = INFO;
    4545
     46static void fd_internal_logger( int, const char *, va_list );
     47
    4648/* These may be used to pass specific debug requests via the command-line parameters */
    4749char * fd_debug_one_function = NULL;
     
    5355
    5456/* 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;
     57void (*fd_logger)( int loglevel, const char * format, va_list args ) = fd_internal_logger;
    5658
    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 */
     60int fd_log_handler_register( void (*logger)(int loglevel, const char * format, va_list args) )
    5961{
    6062        CHECK_PARAMS( logger );
    6163
    62         if ( fd_external_logger != NULL )
     64        if ( fd_logger != fd_internal_logger )
    6365        {
    6466               return EALREADY; /* only one registration allowed */
     
    6668        else
    6769        {
    68                fd_external_logger = logger;
     70               fd_logger = logger;
    6971        }
     72
    7073        return 0;
    7174}
     
    7477int fd_log_handler_unregister ( void )
    7578{
    76         fd_external_logger = NULL;
     79        fd_logger = fd_internal_logger;
    7780        return 0; /* Successfull in all cases. */
    7881}
     
    8386}
    8487
     88
     89static 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
    85105/* Log a debug message */
    86 void fd_log_debug_fstr ( FILE * fstr, const char * format, ... )
     106void fd_log ( int loglevel, const char * format, ... )
    87107{
    88108        va_list ap;
     
    93113       
    94114        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);
    104116        va_end(ap);
    105117
     
    107119       
    108120        (void)pthread_mutex_unlock(&fd_log_lock);
     121}
     122
     123/* Log debug message to file. */
     124void 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);
    109131}
    110132
  • libfdproto/log.c

    r945 r961  
    33* Author: Sebastien Decugis <sdecugis@freediameter.net>                                                  *
    44*                                                                                                        *
    5 * Copyright (c) 2012, WIDE Project and NICT                                                              *
     5* Copyright (c) 2013, WIDE Project and NICT                                                              *
    66* All rights reserved.                                                                                   *
    77*                                                                                                        *
  • libfdproto/messages.c

    r928 r961  
    683683        struct tm tm;
    684684       
    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) );
    686686       
    687687        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) );
    689689                return 0;
    690690        }
     
    693693                tsoffset += strftime(buftime + tsoffset, sizeof(buftime) - tsoffset, "%D,%T", localtime_r( &msg->msg_ts_rcv.tv_sec , &tm ));
    694694                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) );
    696696        }
    697697        if ((msg->msg_ts_sent.tv_sec != 0) || (msg->msg_ts_sent.tv_nsec != 0)) {
    698698                tsoffset += strftime(buftime + tsoffset, sizeof(buftime) - tsoffset, "%D,%T", localtime_r( &msg->msg_ts_sent.tv_sec , &tm ));
    699699                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) );
    701701        }
    702702       
    703703        if (!msg->msg_model) {
    704704               
    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) );
    706706               
    707707        } else {
     
    711711                ret = fd_dict_gettype(msg->msg_model, &dicttype);
    712712                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) );
    714714                        goto public;
    715715                }
    716716                ret = fd_dict_getval(msg->msg_model, &dictdata);
    717717                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)) );
    719719                        goto public;
    720720                }
    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,
    722722                        DUMP_CMDFL_val(dictdata.cmd_flag_val), DUMP_CMDFL_val(dictdata.cmd_flag_mask), dictdata.cmd_code, dictdata.cmd_name) );
    723723        }
    724724public:
    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,
    726726                msg->msg_public.msg_version,
    727727                msg->msg_public.msg_length,
     
    732732                msg->msg_public.msg_eteid
    733733                ) );
    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)|",
    735735                        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) );
    736736        return 0;
     
    743743       
    744744        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) );
    746746                return 0;
    747747        }
     
    749749        if (!avp->avp_model) {
    750750               
    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) );
    752752               
    753753        } else {
     
    757757                ret = fd_dict_gettype(avp->avp_model, &dicttype);
    758758                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) );
    760760                        goto public;
    761761                }
    762762                ret = fd_dict_getval(avp->avp_model, &dictdata);
    763763                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)) );
    765765                        goto public;
    766766                }
    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,
    768768                        DUMP_AVPFL_val(dictdata.avp_flag_val),
    769769                        DUMP_AVPFL_val(dictdata.avp_flag_mask),
     
    773773        }
    774774public:
    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,
    776776                avp->avp_public.avp_code,
    777777                DUMP_AVPFL_val(avp->avp_public.avp_flags),
     
    783783        if (avp->avp_public.avp_value) {
    784784                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) );
    786786                } else {
    787787                        CHECK_FCT( fd_dict_dump_avp_value(avp->avp_public.avp_value, avp->avp_model, indent, outstr, offset, outlen) );
     
    789789        }
    790790
    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) );
    792792        return 0;
    793793}
     
    880880        /* now really output this in one shot, so it is not interrupted */
    881881        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);
    883883        TRACE_DEBUG(level, "------ /end of object %p -------", obj);
    884884       
     
    896896                        fd_log_debug_fstr(fd_g_debug_fstr, "Error while dumping %p\n", obj) );
    897897        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);
    899899        TRACE_DEBUG(level, "------ /end of object %p -------", obj);
    900900        free(outstr);
  • libfdproto/messages.c

    r951 r961  
    33* Author: Sebastien Decugis <sdecugis@freediameter.net>                                                  *
    44*                                                                                                        *
    5 * Copyright (c) 2012, WIDE Project and NICT                                                              *
     5* Copyright (c) 2013, WIDE Project and NICT                                                              *
    66* All rights reserved.                                                                                   *
    77*                                                                                                        *
Note: See TracChangeset for help on using the changeset viewer.