Changeset 902 for branches/nat-traversal/libtransmission/natpmp.c
- Timestamp:
- Sep 24, 2006, 7:41:05 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nat-traversal/libtransmission/natpmp.c
r901 r902 59 59 unsigned int adding : 1; 60 60 unsigned int nobodyhome : 1; 61 unsigned int portused: 1;61 unsigned int tmpfail : 1; 62 62 int fd; 63 63 int delay; … … 77 77 #define PMP_STATE_FAILED 5 78 78 #define PMP_STATE_NOBODYHOME 6 79 #define PMP_STATE_ PORTUSED779 #define PMP_STATE_TMPFAIL 7 80 80 char state; 81 81 unsigned int active : 1; … … 110 110 static tr_tristate_t 111 111 readrequest( uint8_t * buf, int len, int adding, int port, 112 tr_natpmp_uptime_t * uptime, uint64_t * renew, int * used);112 tr_natpmp_uptime_t * uptime, uint64_t * renew, int * tmpfail ); 113 113 114 114 tr_natpmp_t * … … 200 200 case PMP_STATE_FAILED: 201 201 case PMP_STATE_NOBODYHOME: 202 case PMP_STATE_ PORTUSED:202 case PMP_STATE_TMPFAIL: 203 203 break; 204 204 default: … … 238 238 break; 239 239 case PMP_STATE_FAILED: 240 case PMP_STATE_ PORTUSED:240 case PMP_STATE_TMPFAIL: 241 241 ret = TR_NAT_TRAVERSAL_ERROR; 242 242 break; … … 294 294 { 295 295 case PMP_STATE_IDLE: 296 case PMP_STATE_ PORTUSED:296 case PMP_STATE_TMPFAIL: 297 297 if( 0 < pmp->newport ) 298 298 { 299 tr_dbg( "nat-pmp state %s -> add with port %i", 300 ( PMP_STATE_IDLE == pmp->state ? "idle" : "err" ), 301 pmp->newport ); 299 302 pmp->state = PMP_STATE_ADDING; 300 tr_dbg( "nat-pmp state %s -> add with port %i",301 ( PMP_STATE_IDLE == pmp->state ? "idle" : "used" ),302 pmp->newport );303 303 } 304 304 break; … … 338 338 tr_dbg( "nat-pmp state add -> nobodyhome on pulse" ); 339 339 } 340 else if( pmp->req-> portused)340 else if( pmp->req->tmpfail ) 341 341 { 342 pmp->state = PMP_STATE_ PORTUSED;343 tr_dbg( "nat-pmp state add -> usedon pulse" );342 pmp->state = PMP_STATE_TMPFAIL; 343 tr_dbg( "nat-pmp state add -> err on pulse" ); 344 344 if( pmp->req->port == pmp->newport ) 345 345 { … … 390 390 tr_dbg( "nat-pmp state del -> nobodyhome on pulse" ); 391 391 } 392 else if( pmp->req->tmpfail ) 393 { 394 pmp->state = PMP_STATE_TMPFAIL; 395 tr_dbg( "nat-pmp state del -> err on pulse" ); 396 pmp->mappedport = -1; 397 } 392 398 else 393 399 { … … 526 532 struct sockaddr_in sin; 527 533 uint8_t buf[16]; 528 int res, used;534 int res, tmpfail; 529 535 uint64_t now; 530 536 tr_tristate_t ret; … … 571 577 572 578 ret = readrequest( buf, res, req->adding, req->port, req->uptime, renew, 573 & used);574 req-> portused = ( used? 1 : 0 );579 &tmpfail ); 580 req->tmpfail = ( tmpfail ? 1 : 0 ); 575 581 return ret; 576 582 } … … 681 687 static tr_tristate_t 682 688 readrequest( uint8_t * buf, int len, int adding, int port, 683 tr_natpmp_uptime_t * uptime, uint64_t * renew, int * used)689 tr_natpmp_uptime_t * uptime, uint64_t * renew, int * tmpfail ) 684 690 { 685 691 uint8_t version, opcode, wantedopcode; … … 687 693 uint32_t seconds, lifetime; 688 694 689 assert( !adding || NULL != used);690 if( NULL != used)691 { 692 * used= 0;695 assert( !adding || NULL != tmpfail ); 696 if( NULL != tmpfail ) 697 { 698 *tmpfail = 0; 693 699 } 694 700 if( 4 > len ) … … 719 725 return TR_ERROR; 720 726 } 721 if( PMP_RESPCODE_OK != rescode ) 722 { 723 tr_err( "bad nat-pmp result code %hu", rescode ); 724 return TR_ERROR; 727 switch( rescode ) 728 { 729 case PMP_RESPCODE_OK: 730 break; 731 case PMP_RESPCODE_REFUSED: 732 case PMP_RESPCODE_NETDOWN: 733 case PMP_RESPCODE_NOMEM: 734 if( NULL != tmpfail ) 735 { 736 *tmpfail = 1; 737 } 738 /* fallthrough */ 739 default: 740 tr_err( "bad nat-pmp result code %hu", rescode ); 741 return TR_ERROR; 725 742 } 726 743 … … 764 781 if( port != pubport ) 765 782 { 766 * used= 1;783 *tmpfail = 1; 767 784 /* XXX should just start announcing the pub port we're given */ 768 785 return TR_ERROR;
Note: See TracChangeset
for help on using the changeset viewer.