Changeset 1215:65c6460f60f2 in freeDiameter
- Timestamp:
- Jun 19, 2013, 11:20:47 AM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/hooks.c
r1202 r1215 281 281 } 282 282 283 static pthread_mutex_t hook_default_mtx = PTHREAD_MUTEX_INITIALIZER; 284 static char * hook_default_buf = NULL; 285 static size_t hook_default_len = 0; 286 283 287 /* The function that does the work of calling the extension's callbacks and also managing the permessagedata structures */ 284 288 void fd_hook_call(enum fd_hook_type type, struct msg * msg, struct fd_peer * peer, void * other, struct fd_msg_pmdl * pmdl) … … 290 294 /* lock the list of hooks for this type */ 291 295 CHECK_POSIX_DO( pthread_rwlock_rdlock(&HS_array[type].rwlock), ); 296 297 pthread_cleanup_push( fd_cleanup_rwlock, &HS_array[type].rwlock ); 292 298 293 299 if (FD_IS_LIST_EMPTY(&HS_array[type].sentinel)) { … … 309 315 } 310 316 317 pthread_cleanup_pop(0); 318 311 319 /* done */ 312 320 CHECK_POSIX_DO( pthread_rwlock_unlock(&HS_array[type].rwlock), ); 313 321 314 322 if (call_default) { 315 char * buf = NULL; 316 size_t len = 0; 323 CHECK_POSIX_DO( pthread_mutex_lock(&hook_default_mtx), ); 324 325 pthread_cleanup_push( fd_cleanup_mutex, &hook_default_mtx ); 317 326 318 327 /* There was no registered handler, default behavior for this hook */ … … 325 334 326 335 case HOOK_MESSAGE_RECEIVED: { 327 CHECK_MALLOC_DO(fd_msg_dump_summary(& buf, &len, NULL, msg, NULL, 0, 1), break);328 LOG_D("RCV from '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", buf);336 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 337 LOG_D("RCV from '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); 329 338 break; 330 339 } 331 340 332 341 case HOOK_MESSAGE_LOCAL: { 333 CHECK_MALLOC_DO(fd_msg_dump_full(& buf, &len, NULL, msg, NULL, 0, 1), break);334 LOG_A("Handled to framework for sending: %s", buf);342 CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 343 LOG_A("Handled to framework for sending: %s", hook_default_buf); 335 344 break; 336 345 } 337 346 338 347 case HOOK_MESSAGE_SENT: { 339 CHECK_MALLOC_DO(fd_msg_dump_summary(& buf, &len, NULL, msg, NULL, 0, 1), break);340 LOG_D("SENT to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", buf);348 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 349 LOG_D("SENT to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); 341 350 break; 342 351 } 343 352 344 353 case HOOK_MESSAGE_FAILOVER: { 345 CHECK_MALLOC_DO(fd_msg_dump_summary(& buf, &len, NULL, msg, NULL, 0, 1), break);346 LOG_D("Failing over message sent to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", buf);354 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 355 LOG_D("Failing over message sent to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); 347 356 break; 348 357 } … … 357 366 id = (DiamId_t)"<local>"; 358 367 359 CHECK_MALLOC_DO(fd_msg_dump_treeview(& buf, &len, NULL, msg, NULL, 0, 1), break);368 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 360 369 361 370 LOG_E("Parsing error: '%s' for the following message received from '%s':", (char *)other, (char *)id); 362 LOG_SPLIT(FD_LOG_ERROR, " ", buf?:"<error dumping message>", NULL);371 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); 363 372 } else { 364 373 struct fd_cnx_rcvdata *rcv_data = other; 365 CHECK_MALLOC_DO(fd_dump_extend_hexdump(& buf, &len, NULL, rcv_data->buffer, rcv_data->length, 0, 0), break);366 LOG_E("Parsing error: cannot parse %zdB buffer from '%s': %s", rcv_data->length, peer ? peer->p_hdr.info.pi_diamid : "<unknown>", buf);374 CHECK_MALLOC_DO(fd_dump_extend_hexdump(&hook_default_buf, &hook_default_len, NULL, rcv_data->buffer, rcv_data->length, 0, 0), break); 375 LOG_E("Parsing error: cannot parse %zdB buffer from '%s': %s", rcv_data->length, peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); 367 376 } 368 377 break; … … 370 379 371 380 case HOOK_MESSAGE_ROUTING_ERROR: { 372 CHECK_MALLOC_DO(fd_msg_dump_treeview(& buf, &len, NULL, msg, NULL, 0, 1), break);381 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 373 382 LOG_E("Routing error: '%s' for the following message:", (char *)other); 374 LOG_SPLIT(FD_LOG_ERROR, " ", buf?:"<error dumping message>", NULL);383 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); 375 384 break; 376 385 } 377 386 378 387 case HOOK_MESSAGE_ROUTING_FORWARD: { 379 CHECK_MALLOC_DO(fd_msg_dump_summary(& buf, &len, NULL, msg, NULL, 0, 1), break);380 LOG_D("FORWARDING: %s", buf);388 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 389 LOG_D("FORWARDING: %s", hook_default_buf); 381 390 break; 382 391 } 383 392 384 393 case HOOK_MESSAGE_ROUTING_LOCAL: { 385 CHECK_MALLOC_DO(fd_msg_dump_summary(& buf, &len, NULL, msg, NULL, 0, 1), break);386 LOG_D("DISPATCHING: %s", buf);394 CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 395 LOG_D("DISPATCHING: %s", hook_default_buf); 387 396 break; 388 397 } 389 398 390 399 case HOOK_MESSAGE_DROPPED: { 391 CHECK_MALLOC_DO(fd_msg_dump_treeview(& buf, &len, NULL, msg, NULL, 0, 1), break);400 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 392 401 LOG_E("Message discarded ('%s'):", (char *)other); 393 LOG_SPLIT(FD_LOG_ERROR, " ", buf?:"<error dumping message>", NULL);402 LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); 394 403 break; 395 404 } … … 397 406 case HOOK_PEER_CONNECT_FAILED: { 398 407 if (msg) { 399 CHECK_MALLOC_DO(fd_msg_dump_treeview(& buf, &len, NULL, msg, NULL, 0, 1), break);408 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 400 409 LOG_N("Connection to '%s' failed: '%s'; CER/CEA dump:", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", (char *)other); 401 LOG_SPLIT(FD_LOG_NOTICE, " ", buf?:"<error dumping message>", NULL);410 LOG_SPLIT(FD_LOG_NOTICE, " ", hook_default_buf, NULL); 402 411 } else { 403 412 LOG_D("Connection to '%s' failed: %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", (char *)other); … … 411 420 fd_msg_answ_getq(msg, &msg); /* We dump the CER in that case */ 412 421 } 413 CHECK_MALLOC_DO(fd_msg_dump_treeview(& buf, &len, NULL, msg, NULL, 0, 1), break);422 CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); 414 423 char protobuf[40]; 415 424 if (peer) { … … 420 429 } 421 430 LOG_N("Connected to '%s' (%s), remote capabilities: ", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", protobuf); 422 LOG_SPLIT(FD_LOG_NOTICE, " ", buf?:"<error dumping message>", NULL);431 LOG_SPLIT(FD_LOG_NOTICE, " ", hook_default_buf, NULL); 423 432 break; 424 433 } … … 426 435 } 427 436 428 free(buf); 429 } 430 } 437 pthread_cleanup_pop(0); 438 439 CHECK_POSIX_DO( pthread_mutex_unlock(&hook_default_mtx), ); 440 } 441 }
Note: See TracChangeset
for help on using the changeset viewer.