Ignore:
Timestamp:
Apr 15, 2007, 7:36:24 AM (15 years ago)
Author:
joshe
Message:

Don't try port mapping if binding the port fails.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/natpmp.c

    r1529 r1720  
    9898tr_natpmp_parse_t;
    9999
     100static void
     101unmap( tr_natpmp_t * pmp );
    100102static int
    101103checktime( tr_natpmp_uptime_t * uptime, uint32_t seen );
     
    174176        pmp->active = 0;
    175177        killsock( &pmp->mcastfd );
    176         switch( pmp->state )
    177         {
    178             case PMP_STATE_IDLE:
    179                 break;
    180             case PMP_STATE_ADDING:
    181                 pmp->state = PMP_STATE_IDLE;
    182                 tr_dbg( "nat-pmp state add -> idle" );
    183                 if( NULL != pmp->req )
    184                 {
    185                     pmp->mappedport = pmp->req->gotport;
    186                     killreq( &pmp->req );
    187                     pmp->state = PMP_STATE_DELETING;
    188                     tr_dbg( "nat-pmp state idle -> del" );
    189                 }
    190                 break;
    191             case PMP_STATE_DELETING:
    192                 break;
    193             case PMP_STATE_MAPPED:
    194                 pmp->state = PMP_STATE_DELETING;
    195                 tr_dbg( "nat-pmp state mapped -> del" );
    196                 break;
    197             case PMP_STATE_FAILED:
    198             case PMP_STATE_NOBODYHOME:
    199             case PMP_STATE_TMPFAIL:
    200                 break;
    201             default:
    202                 assert( 0 );
    203                 break;
    204         }
     178        unmap( pmp );
    205179    }
    206180}
     
    254228    tr_inf( "nat-pmp set port %i", port );
    255229    pmp->newport = port;
     230}
     231
     232void
     233tr_natpmpRemoveForwarding( tr_natpmp_t * pmp )
     234{
     235    tr_inf( "nat-pmp unset port" );
     236    pmp->newport = -1;
     237    unmap( pmp );
    256238}
    257239
     
    441423}
    442424
     425void
     426unmap( tr_natpmp_t * pmp )
     427{
     428    switch( pmp->state )
     429    {
     430        case PMP_STATE_IDLE:
     431            break;
     432        case PMP_STATE_ADDING:
     433            if( NULL == pmp->req )
     434            {
     435                pmp->state = PMP_STATE_IDLE;
     436                tr_dbg( "nat-pmp state add -> idle" );
     437            }
     438            else
     439            {
     440                pmp->mappedport = pmp->req->gotport;
     441                killreq( &pmp->req );
     442                pmp->state = PMP_STATE_DELETING;
     443                tr_dbg( "nat-pmp state add -> del" );
     444            }
     445            break;
     446        case PMP_STATE_DELETING:
     447            break;
     448        case PMP_STATE_MAPPED:
     449            pmp->state = PMP_STATE_DELETING;
     450            tr_dbg( "nat-pmp state mapped -> del" );
     451            break;
     452        case PMP_STATE_FAILED:
     453        case PMP_STATE_NOBODYHOME:
     454        case PMP_STATE_TMPFAIL:
     455            break;
     456        default:
     457            assert( 0 );
     458            break;
     459    }
     460}
     461
    443462static int
    444463checktime( tr_natpmp_uptime_t * uptime, uint32_t cursecs )
Note: See TracChangeset for help on using the changeset viewer.