Changes in libfdcore/p_psm.c [1104:757df62cadb6:1085:7d7266115a34] in freeDiameter
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/p_psm.c
r1104 r1085 336 336 peer->p_psm_timer.tv_sec += random() % 4; 337 337 peer->p_psm_timer.tv_nsec+= random() % 1000000000L; 338 if (peer->p_psm_timer.tv_nsec > =1000000000L) {338 if (peer->p_psm_timer.tv_nsec > 1000000000L) { 339 339 peer->p_psm_timer.tv_nsec -= 1000000000L; 340 340 peer->p_psm_timer.tv_sec ++; … … 483 483 struct msg * msg = NULL; 484 484 struct msg_hdr * hdr; 485 struct fd_cnx_rcvdata rcv_data;486 struct fd_msg_pmdl * pmdl = NULL;487 488 rcv_data.buffer = ev_data;489 rcv_data.length = ev_sz;490 pmdl = fd_msg_pmdl_get_inbuf(rcv_data.buffer, rcv_data.length);491 485 492 486 /* Parse the received buffer */ 493 487 CHECK_FCT_DO( fd_msg_parse_buffer( (void *)&ev_data, ev_sz, &msg), 494 488 { 495 fd_ hook_call(HOOK_MESSAGE_PARSING_ERROR, NULL, peer, &rcv_data, pmdl);489 fd_log_debug("Received invalid data from peer '%s', closing the connection", peer->p_hdr.info.pi_diamid); 496 490 free(ev_data); 497 491 CHECK_FCT_DO( fd_event_send(peer->p_events, FDEVP_CNX_ERROR, 0, NULL), goto psm_reset ); … … 499 493 } ); 500 494 501 fd_hook_associate(msg, pmdl);502 503 495 /* If the current state does not allow receiving messages, just drop it */ 504 496 if (cur_state == STATE_CLOSED) { 505 497 /* In such case, just discard the message */ 506 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, "Message purged from queue, peer in CLOSED state", fd_msg_pmdl_get(msg));498 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Purged from peer '%s''s queue (CLOSED state).", peer->p_hdr.info.pi_diamid ); 507 499 fd_msg_free(msg); 508 500 goto psm_loop; 509 501 } 510 502 503 /* Log incoming message */ 504 //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) ); 505 511 506 /* Extract the header */ 512 507 CHECK_FCT_DO( fd_msg_hdr(msg, &hdr), goto psm_end ); … … 518 513 CHECK_FCT_DO( fd_p_sr_fetch(&peer->p_sr, hdr->msg_hbhid, &req), goto psm_end ); 519 514 if (req == NULL) { 520 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, "Answer received with no corresponding sent request.", fd_msg_pmdl_get(msg));515 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Answer received with no corresponding sent request." ); 521 516 fd_msg_free(msg); 522 517 goto psm_loop; … … 526 521 CHECK_FCT_DO( fd_msg_answ_associate( msg, req ), goto psm_end ); 527 522 523 /* Display the delay to receive the answer */ 524 { 525 //fd_msg_log( FD_MSG_LOG_TIMING, msg, "Answer received in %ld.%6.6ld sec.", (long)delay.tv_sec, delay.tv_nsec / 1000 ); 526 } 528 527 } else { 529 528 /* Mark the incoming request so that we know we have pending answers for this peer */ … … 532 531 CHECK_POSIX_DO( pthread_mutex_unlock(&peer->p_state_mtx), goto psm_end ); 533 532 } 534 535 /* Log incoming message */536 fd_hook_call(HOOK_MESSAGE_RECEIVED, msg, peer, NULL, fd_msg_pmdl_get(msg));537 533 538 534 if (cur_state == STATE_OPEN_NEW) { … … 573 569 case STATE_WAITCEA: 574 570 case STATE_CLOSED: 575 default: {571 default: 576 572 /* In such case, just discard the message */ 577 char buf[128]; 578 snprintf(buf, sizeof(buf), "Received while peer state machine was in state %s.", STATE_STR(cur_state)); 579 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, buf, fd_msg_pmdl_get(msg)); 573 //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) ); 580 574 fd_msg_free(msg); 581 }582 575 } 583 576 goto psm_loop; … … 586 579 /* Link-local message: They must be understood by our dictionary, otherwise we return an error */ 587 580 { 588 struct msg * error = NULL; 589 int ret = fd_msg_parse_or_error( &msg, &error ); 581 int ret = fd_msg_parse_or_error( &msg ); 590 582 if (ret != EBADMSG) { 591 CHECK_FCT_DO( ret, 592 { 593 LOG_E("%s: An unexpected error occurred while parsing a link-local message", peer->p_hdr.info.pi_diamid); 594 fd_msg_free(msg); 595 goto psm_end; 596 } ); 583 CHECK_FCT_DO( ret, goto psm_end ); 597 584 } else { 598 if (msg == NULL) {585 if (msg) { 599 586 /* Send the error back to the peer */ 600 CHECK_FCT_DO( ret = fd_out_send(& error, NULL, peer, FD_CNX_ORDERED), );601 if ( error) {587 CHECK_FCT_DO( ret = fd_out_send(&msg, NULL, peer, FD_CNX_ORDERED), ); 588 if (msg) { 602 589 /* Only if an error occurred & the message was not saved / dumped */ 603 LOG_E("%s: error sending a message", peer->p_hdr.info.pi_diamid);604 CHECK_FCT_DO( fd_msg_free( error), goto psm_end);590 //fd_msg_log( FD_MSG_LOG_DROPPED, msg, "Internal error: Problem while sending (%s)", strerror(ret) ); 591 CHECK_FCT_DO( fd_msg_free(msg), goto psm_end); 605 592 } 606 593 } else { 607 594 /* We received an invalid answer, let's disconnect */ 608 LOG_E("%s: Received invalid answer to Base protocol message, disconnecting...", peer->p_hdr.info.pi_diamid);609 CHECK_FCT_DO( fd_msg_free(msg), goto psm_end);610 595 CHECK_FCT_DO( fd_event_send(peer->p_events, FDEVP_CNX_ERROR, 0, NULL), goto psm_reset ); 611 596 } … … 617 602 switch (hdr->msg_code) { 618 603 case CC_CAPABILITIES_EXCHANGE: 619 CHECK_FCT_DO( fd_p_ce_msgrcv(&msg, (hdr->msg_flags & CMD_FLAG_REQUEST), peer), 620 { 621 if (msg) 622 CHECK_FCT_DO( fd_msg_free(msg), ); 623 goto psm_reset; 624 } ); 604 CHECK_FCT_DO( fd_p_ce_msgrcv(&msg, (hdr->msg_flags & CMD_FLAG_REQUEST), peer), goto psm_reset ); 625 605 break; 626 606 … … 691 671 /* Mark the connection problem */ 692 672 peer->p_flags.pf_cnx_pb = 1; 693 694 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "The connection was broken", NULL);695 673 696 674 /* Destroy the connection, restart the timer to a new connection attempt */ … … 754 732 } 755 733 if (params->cer) { 734 //fd_msg_log( FD_MSG_LOG_DROPPED, params->cer, "Internal error: this CER was not handled as expected." ); 756 735 CHECK_FCT_DO( fd_msg_free(params->cer), ); 757 736 params->cer = NULL; … … 774 753 case STATE_WAITCNXACK_ELEC: 775 754 case STATE_WAITCNXACK: 776 LOG_D("%s: Connection established", peer->p_hdr.info.pi_diamid);777 755 fd_p_ce_handle_newcnx(peer, cnx); 778 756 break; … … 803 781 804 782 case STATE_WAITCNXACK: 805 LOG_D("%s: Connection attempt failed", peer->p_hdr.info.pi_diamid);806 783 /* Go back to CLOSE */ 807 784 fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc); … … 826 803 827 804 case STATE_CLOSED: 828 LOG_D("%s: Connecting...", peer->p_hdr.info.pi_diamid);829 805 CHECK_FCT_DO( fd_psm_change_state(peer, STATE_WAITCNXACK), goto psm_end ); 830 806 fd_psm_next_timeout(peer, 0, CNX_TIMEOUT); … … 835 811 /* Mark the connection problem */ 836 812 peer->p_flags.pf_cnx_pb = 1; 813 case STATE_CLOSING: 837 814 case STATE_WAITCNXACK: 838 815 case STATE_WAITCEA: 839 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "Timeout while waiting for remote peer", NULL);840 case STATE_CLOSING:841 816 /* Destroy the connection, restart the timer to a new connection attempt */ 842 817 fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc); … … 874 849 875 850 psm_end: 876 LOG_N("%s: Going to ZOMBIE state (no more activity)", peer->p_hdr.info.pi_diamid);877 851 fd_psm_cleanup(peer, 1); 878 852 TRACE_DEBUG(INFO, "'%s'\t-> STATE_ZOMBIE (terminated)\t'%s'",
Note: See TracChangeset
for help on using the changeset viewer.