Changeset 6985


Ignore:
Timestamp:
Oct 29, 2008, 7:30:17 PM (12 years ago)
Author:
charles
Message:

(libT) possible fix for #1389: bitcomet handshake with TransmissionBT failed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/handshake.c

    r6961 r6985  
    10191019    struct evbuffer * inbuf = EVBUFFER_INPUT ( evin );
    10201020    ReadState         ret;
     1021    int               readyForMore = TRUE;
    10211022
    10221023    dbgmsg( handshake, "handling canRead; state is [%s]",
    10231024           getStateName( handshake->state ) );
    10241025
    1025     switch( handshake->state )
    1026     {
    1027         case AWAITING_HANDSHAKE:
    1028             ret = readHandshake    ( handshake, inbuf ); break;
    1029 
    1030         case AWAITING_PEER_ID:
    1031             ret = readPeerId       ( handshake, inbuf ); break;
    1032 
    1033         case AWAITING_YA:
    1034             ret = readYa           ( handshake, inbuf ); break;
    1035 
    1036         case AWAITING_PAD_A:
    1037             ret = readPadA         ( handshake, inbuf ); break;
    1038 
    1039         case AWAITING_CRYPTO_PROVIDE:
    1040             ret = readCryptoProvide( handshake, inbuf ); break;
    1041 
    1042         case AWAITING_PAD_C:
    1043             ret = readPadC         ( handshake, inbuf ); break;
    1044 
    1045         case AWAITING_IA:
    1046             ret = readIA           ( handshake, inbuf ); break;
    1047 
    1048         case AWAITING_YB:
    1049             ret = readYb           ( handshake, inbuf ); break;
    1050 
    1051         case AWAITING_VC:
    1052             ret = readVC           ( handshake, inbuf ); break;
    1053 
    1054         case AWAITING_CRYPTO_SELECT:
    1055             ret = readCryptoSelect ( handshake, inbuf ); break;
    1056 
    1057         case AWAITING_PAD_D:
    1058             ret = readPadD         ( handshake, inbuf ); break;
    1059 
    1060         default:
    1061             assert( 0 );
     1026    while( readyForMore )
     1027    {
     1028        switch( handshake->state )
     1029        {
     1030            case AWAITING_HANDSHAKE:
     1031                ret = readHandshake    ( handshake, inbuf ); break;
     1032
     1033            case AWAITING_PEER_ID:
     1034                ret = readPeerId       ( handshake, inbuf ); break;
     1035
     1036            case AWAITING_YA:
     1037                ret = readYa           ( handshake, inbuf ); break;
     1038
     1039            case AWAITING_PAD_A:
     1040                ret = readPadA         ( handshake, inbuf ); break;
     1041
     1042            case AWAITING_CRYPTO_PROVIDE:
     1043                ret = readCryptoProvide( handshake, inbuf ); break;
     1044
     1045            case AWAITING_PAD_C:
     1046                ret = readPadC         ( handshake, inbuf ); break;
     1047
     1048            case AWAITING_IA:
     1049                ret = readIA           ( handshake, inbuf ); break;
     1050
     1051            case AWAITING_YB:
     1052                ret = readYb           ( handshake, inbuf ); break;
     1053
     1054            case AWAITING_VC:
     1055                ret = readVC           ( handshake, inbuf ); break;
     1056
     1057            case AWAITING_CRYPTO_SELECT:
     1058                ret = readCryptoSelect ( handshake, inbuf ); break;
     1059
     1060            case AWAITING_PAD_D:
     1061                ret = readPadD         ( handshake, inbuf ); break;
     1062
     1063            default:
     1064                assert( 0 );
     1065        }
     1066
     1067        switch( handshake->state )
     1068        {
     1069            case AWAITING_PAD_C:
     1070                readyForMore = EVBUFFER_LENGTH( inbuf ) >= handshake->pad_c_len;
     1071                break;
     1072
     1073            case AWAITING_PAD_D:
     1074                readyForMore = EVBUFFER_LENGTH( inbuf ) >= handshake->pad_d_len;
     1075                break;
     1076
     1077            case AWAITING_IA:
     1078                readyForMore = EVBUFFER_LENGTH( inbuf ) >= handshake->ia_len;
     1079                break;
     1080
     1081            default:
     1082                readyForMore = ret == READ_NOW;
     1083                break;
     1084        }
    10621085    }
    10631086
Note: See TracChangeset for help on using the changeset viewer.