Changeset 1078:74bba7975864 in freeDiameter
- Timestamp:
- Apr 30, 2013, 4:37:57 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 1 deleted
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/dbg_interactive.py.sample
r979 r1078 364 364 a_msg = msg() 365 365 a_msg.dump() 366 a_msg.log(FD_MSG_LOG_DROPPED, "Check libfdproto for more details. Configure with fd_msg_log_config.")367 366 del a_msg 368 367 -
extensions/dbg_interactive/messages.i
r1014 r1078 297 297 } 298 298 299 /* Log to file (depending on config) */300 void log ( enum fd_msg_log_cause cause, char * message ) {301 fd_msg_log( cause, $self, message );302 }303 304 299 /* Model */ 305 300 struct dict_object * model() { -
freeDiameterd/main.c
r931 r1078 49 49 static char *conffile = NULL; 50 50 static int gnutls_debug = 0; 51 static int fd_msg_log_enabled = 0; /* all logs disabled by default, this field is a bitfield of enabled FD_MSG_LOG_* */52 51 53 52 /* gnutls debug */ … … 88 87 } 89 88 90 /* set messages logging */91 if (fd_msg_log_enabled) {92 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_DROPPED)) {93 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_DROPPED, FD_MSG_LOGTO_DEBUGONLY, NULL) );94 }95 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_RECEIVED)) {96 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_RECEIVED, FD_MSG_LOGTO_DEBUGONLY, NULL) );97 }98 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_SENT)) {99 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_SENT, FD_MSG_LOGTO_DEBUGONLY, NULL) );100 }101 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_NODELIVER)) {102 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_NODELIVER, FD_MSG_LOGTO_DEBUGONLY, NULL) );103 }104 if (fd_msg_log_enabled & (1 << FD_MSG_LOG_TIMING)) {105 CHECK_FCT( fd_msg_log_config(FD_MSG_LOG_TIMING, FD_MSG_LOGTO_DEBUGONLY, NULL) );106 }107 }108 109 89 /* Allow SIGINT and SIGTERM from this point to terminate the application */ 110 90 CHECK_POSIX( pthread_create(&signals_thr, NULL, catch_signals, NULL) ); … … 169 149 " -V, --version Print version and exit\n" 170 150 " -c, --config=filename Read configuration from this file instead of the \n" 171 " default location (" DEFAULT_CONF_PATH "/" FD_DEFAULT_CONF_FILENAME ").\n" 172 " -M, --enable_msg_log=( DROPPED | RECEIVED | SENT | NODELIVER | TIMING )\n" 173 " Enable logging of these messages in the output.\n"); 151 " default location (" DEFAULT_CONF_PATH "/" FD_DEFAULT_CONF_FILENAME ").\n"); 174 152 printf( "\nDebug:\n" 175 153 " These options are mostly useful for developers\n" … … 197 175 { "dbg_file", required_argument, NULL, 'F' }, 198 176 { "dbg_gnutls", required_argument, NULL, 'g' }, 199 { "enable_msg_log", optional_argument, NULL, 'M' },200 177 { NULL, 0, NULL, 0 } 201 178 }; … … 232 209 break; 233 210 234 case 'M': /* disable logging of these messages */235 if (optarg) {236 if (!strcmp(optarg, "DROPPED")) {237 fd_msg_log_enabled |= 1 << FD_MSG_LOG_DROPPED;238 } else239 if (!strcmp(optarg, "RECEIVED")) {240 fd_msg_log_enabled |= 1 << FD_MSG_LOG_RECEIVED;241 } else242 if (!strcmp(optarg, "SENT")) {243 fd_msg_log_enabled |= 1 << FD_MSG_LOG_SENT;244 } else245 if (!strcmp(optarg, "NODELIVER")) {246 fd_msg_log_enabled |= 1 << FD_MSG_LOG_NODELIVER;247 } else248 if (!strcmp(optarg, "TIMING")) {249 fd_msg_log_enabled |= 1 << FD_MSG_LOG_TIMING;250 } else {251 main_help();252 exit(0);253 }254 } else {255 fd_msg_log_enabled = -1; /* all logs enabled */256 }257 258 211 case 'd': /* Increase verbosity of debug messages. */ 259 212 fd_g_debug_lvl++; -
include/freeDiameter/libfdproto.h
r1067 r1078 2340 2340 void fd_msg_dump_walk ( int level, msg_or_avp *obj ); 2341 2341 void fd_msg_dump_one ( int level, msg_or_avp *obj ); 2342 /* Dump full message to log */ 2343 void fd_msg_dump_full ( int level, struct dictionary *dict, const char *prefix, msg_or_avp *obj ); 2344 2345 /* 2346 * FUNCTION: fd_msg_log 2347 * 2348 * PARAMETERS: 2349 * cause : Context for calling this function. This allows the log facility to be configured precisely. 2350 * msg : The message to log. 2351 * prefix_format: Printf-style format message that is printed ahead of the message. Might be reason for drop or so. 2352 * 2353 * DESCRIPTION: 2354 * This function is called when a Diameter message reaches some particular points in the fD framework. 2355 * The actual effect is configurable: log in a separate file, dump in the debug log, etc. 2356 * 2357 * RETURN VALUE: 2358 * - 2359 */ 2360 enum fd_msg_log_cause { 2361 FD_MSG_LOG_DROPPED = 1, /* message has been dropped by the framework */ 2362 FD_MSG_LOG_RECEIVED, /* message received from the network */ 2363 FD_MSG_LOG_SENT, /* message sent to another peer */ 2364 FD_MSG_LOG_NODELIVER, /* message could not be delivered to any peer */ 2365 FD_MSG_LOG_TIMING /* profiling messages */ 2366 }; 2367 #define FD_MSG_LOG_MAX FD_MSG_LOG_TIMING 2368 void fd_msg_log( enum fd_msg_log_cause cause, struct msg * msg, const char * prefix_format, ... ) _ATTRIBUTE_PRINTFLIKE_(3,4); 2369 2370 /* configure the msg_log facility */ 2371 enum fd_msg_log_method { 2372 FD_MSG_LOGTO_NONE = 0, /* The message is not dumped. This is the default. */ 2373 FD_MSG_LOGTO_DEBUGONLY, /* Simply log the message with other debug information, at the INFO level. */ 2374 FD_MSG_LOGTO_FILE, /* Messages are dumped in a single file, defined in arg */ 2375 FD_MSG_LOGTO_DIR /* Messages are dumped in different files within one directory defined in arg. */ 2376 }; 2377 int fd_msg_log_config(enum fd_msg_log_cause cause, enum fd_msg_log_method method, const char * arg); 2378 void fd_msg_log_init(struct dictionary *dict); 2342 2343 /* Helper functions to get a dump of an object in the logs. Several formats are available. 2344 * buf : a buffer that can be reallocated if needed. *buf==NULL is also accepted for first allocation 2345 * buflen: the length of the buffer buf. 2346 * dict : optional, the dictionary to use for resolving objects, if force_parsing != 0 2347 * obj : the message or AVP to dump. 2348 * 2349 * After use, the buf pointer should be freed. 2350 */ 2351 /* one-line dump with only short information */ 2352 void fd_msg_dump_summary( char ** buf, size_t buflen, struct dictionary *dict, msg_or_avp *obj, int force_parsing); 2353 /* one-line dump with all the contents of the message */ 2354 void fd_msg_dump_full( char ** buf, size_t buflen, struct dictionary *dict, msg_or_avp *obj, int force_parsing); 2355 /* multi-line human-readable dump similar to wireshark output */ 2356 void fd_msg_dump_treeview( char ** buf, size_t buflen, struct dictionary *dict, msg_or_avp *obj, int force_parsing); 2357 2379 2358 2380 2359 /*********************************************/ … … 2528 2507 int fd_msg_source_set( struct msg * msg, DiamId_t diamid, size_t diamidlen, int add_rr, struct dictionary * dict ); 2529 2508 int fd_msg_source_get( struct msg * msg, DiamId_t *diamid, size_t * diamidlen ); 2530 2531 /*2532 * FUNCTION: fd_msg_ts_*2533 *2534 * PARAMETERS:2535 * msg : A msg object.2536 * ts : A struct timespec pointer, indexed on CLOCK_REALTIME2537 *2538 * DESCRIPTION:2539 * Associate or retrieve timestamps meaningful for the message.2540 * A timestamp with a value of { 0, 0 } means: not set.2541 *2542 * RETURN VALUE:2543 * 0 : Operation complete.2544 * !0 : an error occurred.2545 */2546 /* when msg was received from network */2547 int fd_msg_ts_set_recv( struct msg * msg, struct timespec * ts );2548 int fd_msg_ts_get_recv( struct msg * msg, struct timespec * ts );2549 int fd_msg_ts_set_sent( struct msg * msg, struct timespec * ts );2550 int fd_msg_ts_get_sent( struct msg * msg, struct timespec * ts );2551 2552 2509 2553 2510 /* -
libfdcore/cnxctx.c
r1029 r1078 644 644 } 645 645 646 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &conn->cc_tls_para.recvon), /* continue */ );647 648 646 return ret; 649 647 } … … 701 699 ssize_t ret = 0; 702 700 size_t received = 0; 703 struct timespec recv_on;704 701 705 702 do { … … 738 735 received += ret; 739 736 } 740 741 /* Piggy-tail the timestamp of reception */742 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &recv_on), /* continue */ );743 memcpy(newmsg + length, &recv_on, sizeof(struct timespec));744 737 745 738 /* We have received a complete message, pass it to the daemon */ … … 930 923 int fd_tls_rcvthr_core(struct cnxctx * conn, gnutls_session_t session) 931 924 { 932 struct timespec * rcv_on = &conn->cc_tls_para.recvon;933 934 925 #ifndef DISABLE_SCTP 935 926 void * ptr = gnutls_transport_get_ptr(session); 936 927 if (ptr != conn) { 937 928 struct sctps_ctx * ctx = (struct sctps_ctx *) ptr; 938 rcv_on = &ctx->recvon;939 929 } 940 930 #endif /* DISABLE_SCTP */ … … 984 974 received += ret; 985 975 } 986 987 /* The timestamp of the last TLS chunk received for this rebuilt message lives close to the session pointer, we piggyback it */988 memcpy(newmsg + length, rcv_on, sizeof(struct timespec));989 976 990 977 /* We have received a complete message, pass it to the daemon */ -
libfdcore/core.c
r1034 r1078 209 209 CHECK_FCT( fd_conf_init() ); 210 210 211 /* Initialize the message logging facility */212 fd_msg_log_init(fd_g_config->cnf_dict);213 214 211 /* Add definitions of the base protocol */ 215 212 CHECK_FCT( fd_dict_base_protocol(fd_g_config->cnf_dict) ); -
libfdcore/messages.c
r1014 r1078 415 415 416 416 /* Just discard */ 417 fd_msg_log( FD_MSG_LOG_DROPPED, m, "Answer not compliant to dictionary's ABNF (%s)", pei.pei_errcode );417 //fd_msg_log( FD_MSG_LOG_DROPPED, m, "Answer not compliant to dictionary's ABNF (%s)", pei.pei_errcode ); 418 418 CHECK_FCT( fd_msg_free( m ) ); 419 419 *msg = NULL; -
libfdcore/p_ce.c
r1027 r1078 650 650 *recv_cnx = NULL; 651 651 if (*cer) { 652 fd_msg_log(FD_MSG_LOG_DROPPED, *cer, "An error occurred while rejecting a CER.");652 //fd_msg_log(FD_MSG_LOG_DROPPED, *cer, "An error occurred while rejecting a CER."); 653 653 fd_msg_free(*cer); 654 654 *cer = NULL; … … 720 720 if (req || ((st = fd_peer_getstate(peer)) != STATE_WAITCEA)) { 721 721 if (*msg) { 722 fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Received CER/CEA while in '%s' state.", STATE_STR(st));722 //fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Received CER/CEA while in '%s' state.", STATE_STR(st)); 723 723 CHECK_FCT_DO( fd_msg_free(*msg), /* continue */); 724 724 *msg = NULL; … … 987 987 cleanup: 988 988 if (msg) { 989 fd_msg_log(FD_MSG_LOG_DROPPED, msg, "An error occurred while processing a CER.");989 //fd_msg_log(FD_MSG_LOG_DROPPED, msg, "An error occurred while processing a CER."); 990 990 fd_msg_free(msg); 991 991 } -
libfdcore/p_out.c
r1027 r1078 45 45 int ret; 46 46 uint32_t bkp_hbh = 0; 47 struct timespec senton;48 47 struct msg * cpy_for_logs_only; 49 48 … … 73 72 } 74 73 75 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &senton), /* ... */ );76 CHECK_FCT_DO( fd_msg_ts_set_sent(cpy_for_logs_only, &senton), /* ... */ );77 78 74 /* Log the message */ 79 fd_msg_log( FD_MSG_LOG_SENT, cpy_for_logs_only, "Sent to '%s'", fd_cnx_getid(cnx)); 80 81 { 82 struct timespec rcvon, delay; 83 84 (void) fd_msg_ts_get_recv(cpy_for_logs_only, &rcvon); 85 if (rcvon.tv_sec != 0 || rcvon.tv_nsec != 0) { 86 TS_DIFFERENCE( &delay, &rcvon, &senton); 87 fd_msg_log( FD_MSG_LOG_TIMING, cpy_for_logs_only, "Forwarded in %ld.%6.6ld sec", (long)delay.tv_sec, delay.tv_nsec/1000); 88 } else { /* We log the answer time only for answers generated locally */ 89 if (!msg_is_a_req) { 90 /* get the matching request */ 91 struct msg * req; 92 struct timespec reqrcvon; 93 (void) fd_msg_answ_getq(cpy_for_logs_only, &req); 94 (void) fd_msg_ts_get_recv(req, &reqrcvon); 95 TS_DIFFERENCE( &delay, &reqrcvon, &senton); 96 fd_msg_log( FD_MSG_LOG_TIMING, cpy_for_logs_only, "Answered in %ld.%6.6ld sec", (long)delay.tv_sec, delay.tv_nsec/1000); 97 } 98 } 99 } 75 // fd_msg_log( FD_MSG_LOG_SENT, cpy_for_logs_only, "Sent to '%s'", fd_cnx_getid(cnx)); 100 76 101 77 /* Send the message */ … … 122 98 CHECK_FCT_DO(fd_fifo_post(fd_g_outgoing, &msg), 123 99 { 124 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "An error occurred while attempting to requeue this message during cancellation of the sending function");100 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "An error occurred while attempting to requeue this message during cancellation of the sending function"); 125 101 CHECK_FCT_DO(fd_msg_free(msg), /* What can we do more? */); 126 102 } ); … … 155 131 { 156 132 if (msg) { 157 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error: Problem while sending (%s)", strerror(ret) );133 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error: Problem while sending (%s)", strerror(ret) ); 158 134 fd_msg_free(msg); 159 135 } … … 207 183 { 208 184 if (msg) { 209 fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Internal error: Problem while sending (%s)", strerror(ret) );185 //fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Internal error: Problem while sending (%s)", strerror(ret) ); 210 186 fd_msg_free(*msg); 211 187 *msg = NULL; -
libfdcore/p_psm.c
r1033 r1078 241 241 case FDEVP_CNX_INCOMING: { 242 242 struct cnx_incoming * evd = ev->data; 243 fd_msg_log( FD_MSG_LOG_DROPPED, evd->cer, "Message discarded while cleaning peer state machine queue." );243 //fd_msg_log( FD_MSG_LOG_DROPPED, evd->cer, "Message discarded while cleaning peer state machine queue." ); 244 244 CHECK_FCT_DO( fd_msg_free(evd->cer), /* continue */); 245 245 fd_cnx_destroy(evd->cnx); … … 489 489 struct msg * msg = NULL; 490 490 struct msg_hdr * hdr; 491 struct timespec rcvon;492 493 /* Retrieve the piggytailed timestamp */494 memcpy(&rcvon, ev_data+ev_sz, sizeof(struct timespec));495 491 496 492 /* Parse the received buffer */ … … 503 499 } ); 504 500 505 CHECK_FCT_DO( fd_msg_ts_set_recv(msg, &rcvon), /* ... */ );506 507 501 /* If the current state does not allow receiving messages, just drop it */ 508 502 if (cur_state == STATE_CLOSED) { 509 503 /* In such case, just discard the message */ 510 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Purged from peer '%s''s queue (CLOSED state).", peer->p_hdr.info.pi_diamid );504 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Purged from peer '%s''s queue (CLOSED state).", peer->p_hdr.info.pi_diamid ); 511 505 fd_msg_free(msg); 512 506 goto psm_loop; … … 514 508 515 509 /* Log incoming message */ 516 fd_msg_log( FD_MSG_LOG_RECEIVED, msg, "Received %zdb from '%s' (%s)", ev_sz, peer->p_hdr.info.pi_diamid, STATE_STR(cur_state) );510 //fd_msg_log( FD_MSG_LOG_RECEIVED, msg, "Received %zdb from '%s' (%s)", ev_sz, peer->p_hdr.info.pi_diamid, STATE_STR(cur_state) ); 517 511 518 512 /* Extract the header */ … … 525 519 CHECK_FCT_DO( fd_p_sr_fetch(&peer->p_sr, hdr->msg_hbhid, &req), goto psm_end ); 526 520 if (req == NULL) { 527 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Answer received with no corresponding sent request." );521 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Answer received with no corresponding sent request." ); 528 522 fd_msg_free(msg); 529 523 goto psm_loop; … … 535 529 /* Display the delay to receive the answer */ 536 530 { 537 struct timespec reqsent, delay; 538 (void) fd_msg_ts_get_sent(req, &reqsent); 539 TS_DIFFERENCE( &delay, &reqsent, &rcvon ); 540 fd_msg_log( FD_MSG_LOG_TIMING, msg, "Answer received in %ld.%6.6ld sec.", (long)delay.tv_sec, delay.tv_nsec / 1000 ); 531 //fd_msg_log( FD_MSG_LOG_TIMING, msg, "Answer received in %ld.%6.6ld sec.", (long)delay.tv_sec, delay.tv_nsec / 1000 ); 541 532 } 542 533 } else { … … 586 577 default: 587 578 /* In such case, just discard the message */ 588 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Received from peer '%s' while connection was not in state %s.", peer->p_hdr.info.pi_diamid, STATE_STR(cur_state) );579 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Received from peer '%s' while connection was not in state %s.", peer->p_hdr.info.pi_diamid, STATE_STR(cur_state) ); 589 580 fd_msg_free(msg); 590 581 } … … 603 594 if (msg) { 604 595 /* Only if an error occurred & the message was not saved / dumped */ 605 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error: Problem while sending (%s)", strerror(ret) );596 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error: Problem while sending (%s)", strerror(ret) ); 606 597 CHECK_FCT_DO( fd_msg_free(msg), goto psm_end); 607 598 } … … 652 643 /* Cleanup the message if not done */ 653 644 if (msg) { 654 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Received un-handled non-routable command from peer '%s'.", peer->p_hdr.info.pi_diamid );645 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Received un-handled non-routable command from peer '%s'.", peer->p_hdr.info.pi_diamid ); 655 646 CHECK_FCT_DO( fd_msg_free(msg), /* continue */); 656 647 msg = NULL; … … 660 651 /* At this point the message must have been fully handled already */ 661 652 if (msg) { 662 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error ('%s'): unhandled message.", peer->p_hdr.info.pi_diamid );653 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error ('%s'): unhandled message.", peer->p_hdr.info.pi_diamid ); 663 654 fd_msg_free(msg); 664 655 } … … 746 737 } 747 738 if (params->cer) { 748 fd_msg_log( FD_MSG_LOG_DROPPED, params->cer, "Internal error: this CER was not handled as expected." );739 //fd_msg_log( FD_MSG_LOG_DROPPED, params->cer, "Internal error: this CER was not handled as expected." ); 749 740 CHECK_FCT_DO( fd_msg_free(params->cer), ); 750 741 params->cer = NULL; -
libfdcore/p_sr.c
r1052 r1078 119 119 /* If the callback did not dispose of the message, do it now */ 120 120 if (ed->request) { 121 fd_msg_log(FD_MSG_LOG_DROPPED, ed->request, "Expiration period completed without an answer, and the expiry callback did not dispose of the message.");121 //fd_msg_log(FD_MSG_LOG_DROPPED, ed->request, "Expiration period completed without an answer, and the expiry callback did not dispose of the message."); 122 122 CHECK_FCT_DO( fd_msg_free(ed->request), /* ignore */ ); 123 123 } … … 325 325 CHECK_FCT_DO( ret = fd_fifo_post(fd_g_outgoing, &sr->req), 326 326 { 327 fd_msg_log( FD_MSG_LOG_DROPPED, sr->req, "Internal error: error while requeuing during failover: %s", strerror(ret) );327 //fd_msg_log( FD_MSG_LOG_DROPPED, sr->req, "Internal error: error while requeuing during failover: %s", strerror(ret) ); 328 328 CHECK_FCT_DO(fd_msg_free(sr->req), /* What can we do more? */) 329 329 }); 330 330 } else { 331 331 /* Just free the request. */ 332 fd_msg_log( FD_MSG_LOG_DROPPED, sr->req, "Sent & unanswered local message discarded during failover." );332 //fd_msg_log( FD_MSG_LOG_DROPPED, sr->req, "Sent & unanswered local message discarded during failover." ); 333 333 CHECK_FCT_DO(fd_msg_free(sr->req), /* Ignore */); 334 334 } -
libfdcore/peers.c
r1027 r1078 245 245 { 246 246 /* fallback: destroy the message */ 247 fd_msg_log(FD_MSG_LOG_DROPPED, m, "Internal error: unable to requeue this message during failover process");247 //fd_msg_log(FD_MSG_LOG_DROPPED, m, "Internal error: unable to requeue this message during failover process"); 248 248 CHECK_FCT_DO(fd_msg_free(m), /* What can we do more? */) 249 249 } ); -
libfdcore/queues.c
r767 r1078 74 74 75 75 /* We got one! */ 76 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Message lost because framework is terminating." );76 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Message lost because framework is terminating." ); 77 77 fd_msg_free(msg); 78 78 } -
libfdcore/routing_dispatch.c
r1055 r1078 393 393 394 394 if (!peer) { 395 fd_msg_log(FD_MSG_LOG_DROPPED, *pmsg, "Unable to send error '%s' to deleted peer '%s' in reply to this message.", error_code, id);395 //fd_msg_log(FD_MSG_LOG_DROPPED, *pmsg, "Unable to send error '%s' to deleted peer '%s' in reply to this message.", error_code, id); 396 396 fd_msg_free(*pmsg); 397 397 *pmsg = NULL; … … 450 450 } 451 451 if (msgptr) { /* another error happen'd */ 452 fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "An unexpected error occurred while parsing the message (%s)", strerror(ret));452 //fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "An unexpected error occurred while parsing the message (%s)", strerror(ret)); 453 453 CHECK_FCT_DO( fd_msg_free(msgptr), /* continue */); 454 454 } … … 511 511 512 512 if (!is_req) { 513 fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Internal error: Answer received to locally issued request, but not handled by any handler.");513 //fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Internal error: Answer received to locally issued request, but not handled by any handler."); 514 514 fd_msg_free(msgptr); 515 515 break; … … 756 756 CHECK_FCT_DO( ret = (*rh->rt_fwd_cb)(rh->cbdata, &msgptr), 757 757 { 758 fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Internal error: a FWD routing callback returned an error (%s)", strerror(ret));758 //fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Internal error: a FWD routing callback returned an error (%s)", strerror(ret)); 759 759 fd_msg_free(msgptr); 760 760 msgptr = NULL; … … 815 815 CHECK_FCT( fd_peer_getbyid( qry_src, qry_src_len, 0, (void *) &peer ) ); 816 816 if (fd_peer_getstate(peer) != STATE_OPEN) { 817 fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Unable to forward answer to deleted / closed peer '%s'.", qry_src);817 //fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Unable to forward answer to deleted / closed peer '%s'.", qry_src); 818 818 fd_msg_free(msgptr); 819 819 return 0; … … 900 900 CHECK_FCT_DO( ret = (*rh->rt_out_cb)(rh->cbdata, msgptr, candidates), 901 901 { 902 fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Internal error: an OUT routing callback returned an error (%s)", strerror(ret));902 //fd_msg_log( FD_MSG_LOG_DROPPED, msgptr, "Internal error: an OUT routing callback returned an error (%s)", strerror(ret)); 903 903 fd_msg_free(msgptr); 904 904 msgptr = NULL; … … 948 948 /* If the message has not been sent, return an error */ 949 949 if (msgptr) { 950 fd_msg_log( FD_MSG_LOG_NODELIVER, msgptr, "No suitable candidate to route the message to." );950 //fd_msg_log( FD_MSG_LOG_NODELIVER, msgptr, "No suitable candidate to route the message to." ); 951 951 return_error( &msgptr, "DIAMETER_UNABLE_TO_DELIVER", "No suitable candidate to route the message to", NULL); 952 952 } -
libfdcore/sctp.c
r1027 r1078 1068 1068 size_t mempagesz = sysconf(_SC_PAGESIZE); /* We alloc buffer by memory pages for efficiency */ 1069 1069 int timedout = 0; 1070 struct timespec recv_on;1071 1070 1072 1071 TRACE_ENTRY("%p %p %p %p %p", conn, strid, buf, len, event); … … 1189 1188 } 1190 1189 1191 /* Piggy-tail the timestamp of reception */1192 CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &recv_on), /* continue */ );1193 memcpy(data + datasize, &recv_on, sizeof(struct timespec));1194 1195 1190 /* From this point, we have received a message */ 1196 1191 *event = FDEVP_CNX_MSG_RECV; -
libfdcore/server.c
r1061 r1078 169 169 170 170 /* Log incoming message */ 171 fd_msg_log( FD_MSG_LOG_RECEIVED, msg, "Received %zdb from new client '%s'", bufsz, fd_cnx_getid(c->conn) );171 //fd_msg_log( FD_MSG_LOG_RECEIVED, msg, "Received %zdb from new client '%s'", bufsz, fd_cnx_getid(c->conn) ); 172 172 173 173 /* We expect a CER, it must parse with our dictionary and rules */ … … 195 195 /* Cleanup the parsed message if any */ 196 196 if (msg) { 197 fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Received invalid/unexpected message from connecting client '%s'", fd_cnx_getid(c->conn) );197 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Received invalid/unexpected message from connecting client '%s'", fd_cnx_getid(c->conn) ); 198 198 CHECK_FCT_DO( fd_msg_free(msg), /* continue */); 199 199 } -
libfdproto/CMakeLists.txt
r922 r1078 13 13 log.c 14 14 messages.c 15 msg_log.c16 15 ostr.c 17 16 portability.c -
libfdproto/dispatch.c
r1017 r1078 97 97 CHECK_FCT_DO( (r = (*hdl->cb)(msg, avp, sess, hdl->opaque, action)), 98 98 { 99 fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Internal error: a DISPATCH callback returned an error (%s)", strerror(r));99 //fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Internal error: a DISPATCH callback returned an error (%s)", strerror(r)); 100 100 fd_msg_free(*msg); 101 101 *msg = NULL; -
libfdproto/messages.c
r1062 r1078 129 129 DiamId_t msg_src_id; /* Diameter Id of the peer this message was received from. This string is malloc'd and must be freed */ 130 130 size_t msg_src_id_len; /* cached length of this string */ 131 struct timespec msg_ts_rcv; /* Timestamp when this message was received from the network */132 struct timespec msg_ts_sent; /* Timestamp when this message was sent to the network */133 131 134 132 }; … … 734 732 } 735 733 736 if ((msg->msg_ts_rcv.tv_sec != 0) || (msg->msg_ts_rcv.tv_nsec != 0)) {737 tsoffset += strftime(buftime + tsoffset, sizeof(buftime) - tsoffset, "%D,%T", localtime_r( &msg->msg_ts_rcv.tv_sec , &tm ));738 tsoffset += snprintf(buftime + tsoffset, sizeof(buftime) - tsoffset, ".%6.6ld", msg->msg_ts_rcv.tv_nsec / 1000);739 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "Received: %s|", INOBJHDRVAL, buftime) );740 }741 if ((msg->msg_ts_sent.tv_sec != 0) || (msg->msg_ts_sent.tv_nsec != 0)) {742 tsoffset += strftime(buftime + tsoffset, sizeof(buftime) - tsoffset, "%D,%T", localtime_r( &msg->msg_ts_sent.tv_sec , &tm ));743 tsoffset += snprintf(buftime + tsoffset, sizeof(buftime) - tsoffset, ".%6.6ld", msg->msg_ts_sent.tv_nsec / 1000);744 CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "Sent : %s|", INOBJHDRVAL, buftime) );745 }746 747 734 if (!msg->msg_model) { 748 735 … … 998 985 999 986 /* Dump full message */ 1000 void fd_msg_dump_full ( int level, struct dictionary *dict, const char *prefix, msg_or_avp *obj ) 987 // TODO: need align with new prototype & behavior 988 void fd_msg_dump_full_TODO ( int level, struct dictionary *dict, const char *prefix, msg_or_avp *obj ) 1001 989 { 1002 990 msg_or_avp * ref = obj; … … 1361 1349 1362 1350 /* done */ 1363 return 0;1364 }1365 1366 int fd_msg_ts_set_recv( struct msg * msg, struct timespec * ts )1367 {1368 TRACE_ENTRY("%p %p", msg, ts);1369 1370 /* Check we received valid parameters */1371 CHECK_PARAMS( CHECK_MSG(msg) );1372 CHECK_PARAMS( ts );1373 1374 memcpy(&msg->msg_ts_rcv, ts, sizeof(struct timespec));1375 return 0;1376 }1377 1378 int fd_msg_ts_get_recv( struct msg * msg, struct timespec * ts )1379 {1380 TRACE_ENTRY("%p %p", msg, ts);1381 1382 /* Check we received valid parameters */1383 CHECK_PARAMS( CHECK_MSG(msg) );1384 CHECK_PARAMS( ts );1385 1386 memcpy(ts, &msg->msg_ts_rcv, sizeof(struct timespec));1387 return 0;1388 }1389 1390 int fd_msg_ts_set_sent( struct msg * msg, struct timespec * ts )1391 {1392 TRACE_ENTRY("%p %p", msg, ts);1393 1394 /* Check we received valid parameters */1395 CHECK_PARAMS( CHECK_MSG(msg) );1396 CHECK_PARAMS( ts );1397 1398 memcpy(&msg->msg_ts_sent, ts, sizeof(struct timespec));1399 return 0;1400 }1401 1402 int fd_msg_ts_get_sent( struct msg * msg, struct timespec * ts )1403 {1404 TRACE_ENTRY("%p %p", msg, ts);1405 1406 /* Check we received valid parameters */1407 CHECK_PARAMS( CHECK_MSG(msg) );1408 CHECK_PARAMS( ts );1409 1410 memcpy(ts, &msg->msg_ts_sent, sizeof(struct timespec));1411 1351 return 0; 1412 1352 } … … 2639 2579 *action = DISP_ACT_ERROR; 2640 2580 } else { 2641 fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Internal error: Received this answer to a local query with an unsupported application %d", (*msg)->msg_public.msg_appl);2581 //fd_msg_log( FD_MSG_LOG_DROPPED, *msg, "Internal error: Received this answer to a local query with an unsupported application %d", (*msg)->msg_public.msg_appl); 2642 2582 fd_msg_free(*msg); 2643 2583 *msg = NULL; -
tests/tests.h
r1034 r1078 216 216 CHECK( 0, fd_conf_init() ); 217 217 218 /* Initialize the message logging facility */219 fd_msg_log_init(fd_g_config->cnf_dict);220 221 218 /* Add definitions of the base protocol */ 222 219 CHECK( 0, fd_dict_base_protocol(fd_g_config->cnf_dict) );
Note: See TracChangeset
for help on using the changeset viewer.