• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/transmission/transmission-2.73/libtransmission/

Lines Matching defs:nat

83     struct tr_natpmp * nat;
85 nat = tr_new0( struct tr_natpmp, 1 );
86 nat->state = TR_NATPMP_DISCOVER;
87 nat->public_port = 0;
88 nat->private_port = 0;
89 nat->natpmp.s = -1; /* socket */
90 return nat;
94 tr_natpmpClose( tr_natpmp * nat )
96 if( nat )
98 if( nat->natpmp.s >= 0 )
99 tr_netCloseSocket( nat->natpmp.s );
100 tr_free( nat );
105 canSendCommand( const struct tr_natpmp * nat )
107 return tr_time( ) >= nat->command_time;
111 setCommandTime( struct tr_natpmp * nat )
113 nat->command_time = tr_time( ) + COMMAND_WAIT_SECS;
117 tr_natpmpPulse( struct tr_natpmp * nat, tr_port private_port, bool is_enabled, tr_port * public_port )
121 if( is_enabled && ( nat->state == TR_NATPMP_DISCOVER ) )
123 int val = initnatpmp( &nat->natpmp, 0, 0 );
125 val = sendpublicaddressrequest( &nat->natpmp );
127 nat->state = val < 0 ? TR_NATPMP_ERR : TR_NATPMP_RECV_PUB;
128 nat->has_discovered = true;
129 setCommandTime( nat );
132 if( ( nat->state == TR_NATPMP_RECV_PUB ) && canSendCommand( nat ) )
135 const int val = readnatpmpresponseorretry( &nat->natpmp, &response );
142 nat->state = TR_NATPMP_IDLE;
146 nat->state = TR_NATPMP_ERR;
150 if( ( nat->state == TR_NATPMP_IDLE ) || ( nat->state == TR_NATPMP_ERR ) )
152 if( nat->is_mapped && ( !is_enabled || ( nat->private_port != private_port ) ) )
153 nat->state = TR_NATPMP_SEND_UNMAP;
156 if( ( nat->state == TR_NATPMP_SEND_UNMAP ) && canSendCommand( nat ) )
158 const int val = sendnewportmappingrequest( &nat->natpmp, NATPMP_PROTOCOL_TCP,
159 nat->private_port,
160 nat->public_port,
163 nat->state = val < 0 ? TR_NATPMP_ERR : TR_NATPMP_RECV_UNMAP;
164 setCommandTime( nat );
167 if( nat->state == TR_NATPMP_RECV_UNMAP )
170 const int val = readnatpmpresponseorretry( &nat->natpmp, &resp );
178 if( nat->private_port == private_port )
180 nat->private_port = 0;
181 nat->public_port = 0;
182 nat->state = TR_NATPMP_IDLE;
183 nat->is_mapped = false;
188 nat->state = TR_NATPMP_ERR;
192 if( nat->state == TR_NATPMP_IDLE )
194 if( is_enabled && !nat->is_mapped && nat->has_discovered )
195 nat->state = TR_NATPMP_SEND_MAP;
197 else if( nat->is_mapped && tr_time( ) >= nat->renew_time )
198 nat->state = TR_NATPMP_SEND_MAP;
201 if( ( nat->state == TR_NATPMP_SEND_MAP ) && canSendCommand( nat ) )
203 const int val = sendnewportmappingrequest( &nat->natpmp, NATPMP_PROTOCOL_TCP, private_port, private_port, LIFETIME_SECS );
205 nat->state = val < 0 ? TR_NATPMP_ERR : TR_NATPMP_RECV_MAP;
206 setCommandTime( nat );
209 if( nat->state == TR_NATPMP_RECV_MAP )
212 const int val = readnatpmpresponseorretry( &nat->natpmp, &resp );
216 nat->state = TR_NATPMP_IDLE;
217 nat->is_mapped = true;
218 nat->renew_time = tr_time( ) + ( resp.pnu.newportmapping.lifetime / 2 );
219 nat->private_port = resp.pnu.newportmapping.privateport;
220 nat->public_port = resp.pnu.newportmapping.mappedpublicport;
221 tr_ninf( getKey( ), _( "Port %d forwarded successfully" ), nat->private_port );
225 nat->state = TR_NATPMP_ERR;
229 switch( nat->state )
232 *public_port = nat->public_port;
233 return nat->is_mapped ? TR_PORT_MAPPED : TR_PORT_UNMAPPED;