Navigation



Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfdcore/p_psm.c

    r1104 r1085  
    336336                peer->p_psm_timer.tv_sec += random() % 4;
    337337                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) {
    339339                        peer->p_psm_timer.tv_nsec -= 1000000000L;
    340340                        peer->p_psm_timer.tv_sec ++;
     
    483483                struct msg * msg = NULL;
    484484                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);
    491485               
    492486                /* Parse the received buffer */
    493487                CHECK_FCT_DO( fd_msg_parse_buffer( (void *)&ev_data, ev_sz, &msg),
    494488                        {
    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);
    496490                                free(ev_data);
    497491                                CHECK_FCT_DO( fd_event_send(peer->p_events, FDEVP_CNX_ERROR, 0, NULL), goto psm_reset );
     
    499493                        } );
    500494                       
    501                 fd_hook_associate(msg, pmdl);
    502        
    503495                /* If the current state does not allow receiving messages, just drop it */
    504496                if (cur_state == STATE_CLOSED) {
    505497                        /* 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 );
    507499                        fd_msg_free(msg);
    508500                        goto psm_loop;
    509501                }
    510502               
     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       
    511506                /* Extract the header */
    512507                CHECK_FCT_DO( fd_msg_hdr(msg, &hdr), goto psm_end );
     
    518513                        CHECK_FCT_DO( fd_p_sr_fetch(&peer->p_sr, hdr->msg_hbhid, &req), goto psm_end );
    519514                        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." );
    521516                                fd_msg_free(msg);
    522517                                goto psm_loop;
     
    526521                        CHECK_FCT_DO( fd_msg_answ_associate( msg, req ), goto psm_end );
    527522                       
     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                        }
    528527                } else {
    529528                        /* Mark the incoming request so that we know we have pending answers for this peer */
     
    532531                        CHECK_POSIX_DO( pthread_mutex_unlock(&peer->p_state_mtx), goto psm_end  );
    533532                }
    534                
    535                 /* Log incoming message */
    536                 fd_hook_call(HOOK_MESSAGE_RECEIVED, msg, peer, NULL, fd_msg_pmdl_get(msg));
    537533               
    538534                if (cur_state == STATE_OPEN_NEW) {
     
    573569                                case STATE_WAITCEA:
    574570                                case STATE_CLOSED:
    575                                 default: {
     571                                default:
    576572                                        /* 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) );
    580574                                        fd_msg_free(msg);
    581                                 }
    582575                        }
    583576                        goto psm_loop;
     
    586579                /* Link-local message: They must be understood by our dictionary, otherwise we return an error */
    587580                {
    588                         struct msg * error = NULL;
    589                         int ret = fd_msg_parse_or_error( &msg, &error );
     581                        int ret = fd_msg_parse_or_error( &msg );
    590582                        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 );
    597584                        } else {
    598                                 if (msg == NULL) {
     585                                if (msg) {
    599586                                        /* 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) {
    602589                                                /* 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);
    605592                                        }
    606593                                } else {
    607594                                        /* 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);
    610595                                        CHECK_FCT_DO( fd_event_send(peer->p_events, FDEVP_CNX_ERROR, 0, NULL), goto psm_reset );
    611596                                }
     
    617602                switch (hdr->msg_code) {
    618603                        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 );
    625605                                break;
    626606                       
     
    691671                                /* Mark the connection problem */
    692672                                peer->p_flags.pf_cnx_pb = 1;
    693                        
    694                                 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "The connection was broken", NULL);
    695673                               
    696674                                /* Destroy the connection, restart the timer to a new connection attempt */
     
    754732                }
    755733                if (params->cer) {
     734                        //fd_msg_log( FD_MSG_LOG_DROPPED, params->cer, "Internal error: this CER was not handled as expected." );
    756735                        CHECK_FCT_DO( fd_msg_free(params->cer), );
    757736                        params->cer = NULL;
     
    774753                        case STATE_WAITCNXACK_ELEC:
    775754                        case STATE_WAITCNXACK:
    776                                 LOG_D("%s: Connection established", peer->p_hdr.info.pi_diamid);
    777755                                fd_p_ce_handle_newcnx(peer, cnx);
    778756                                break;
     
    803781                               
    804782                        case STATE_WAITCNXACK:
    805                                 LOG_D("%s: Connection attempt failed", peer->p_hdr.info.pi_diamid);
    806783                                /* Go back to CLOSE */
    807784                                fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc);
     
    826803                               
    827804                        case STATE_CLOSED:
    828                                 LOG_D("%s: Connecting...", peer->p_hdr.info.pi_diamid);
    829805                                CHECK_FCT_DO( fd_psm_change_state(peer, STATE_WAITCNXACK), goto psm_end );
    830806                                fd_psm_next_timeout(peer, 0, CNX_TIMEOUT);
     
    835811                                /* Mark the connection problem */
    836812                                peer->p_flags.pf_cnx_pb = 1;
     813                        case STATE_CLOSING:
    837814                        case STATE_WAITCNXACK:
    838815                        case STATE_WAITCEA:
    839                                 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "Timeout while waiting for remote peer", NULL);
    840                         case STATE_CLOSING:
    841816                                /* Destroy the connection, restart the timer to a new connection attempt */
    842817                                fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc);
     
    874849       
    875850psm_end:
    876         LOG_N("%s: Going to ZOMBIE state (no more activity)", peer->p_hdr.info.pi_diamid);
    877851        fd_psm_cleanup(peer, 1);
    878852        TRACE_DEBUG(INFO, "'%s'\t-> STATE_ZOMBIE (terminated)\t'%s'",
Note: See TracChangeset for help on using the changeset viewer.