Codebase list libio-socket-socks-perl / b25817d
fix mess with queue Oleg 9 years ago
1 changed file(s) with 24 addition(s) and 10 deletion(s). Raw diff Collapse all Expand all
138138 Q_BUF => 2,
139139 Q_READS => 3,
140140 Q_SENDS => 4,
141 Q_DEBUGS => 5,
141 Q_OKCB => 5,
142 Q_DEBUGS => 6,
142143 };
143144
144145
426427
427428 last if ($retval == -1);
428429 ${*$self}->{SOCKS}->{queue_results}{ $elt->[Q_SUB] } = $retval;
430 if ($elt->[Q_OKCB]) {
431 $elt->[Q_OKCB]->();
432 }
429433 shift @{ ${*$self}->{SOCKS}->{queue} };
430434 }
431435
432436 if (defined($retval) && !@{ ${*$self}->{SOCKS}->{queue} }) {
433437 ${*$self}->{SOCKS}->{queue_results} = {};
434 ${*$self}->{SOCKS}->{ready} = 1;
438 ${*$self}->{SOCKS}->{ready} = $SOCKS_ERROR ? 0 : 1;
435439 }
436440
437441 return $retval;
11651169 $dstaddr = length($request) == 16 ? Socket::inet_ntop(AF_INET6, $request) : undef;
11661170 }
11671171 else { # unknown address type - how many bytes to read?
1168 ${*$self}->{SOCKS}->{queue} = [ [ '_socks5_accept_command_reply', [ REPLY_ADDR_NOT_SUPPORTED, '0.0.0.0', 0 ], undef, [], 0 ] ];
1169 $! = ESOCKSPROTO;
1170 $SOCKS_ERROR->set(REPLY_ADDR_NOT_SUPPORTED, $@ = $CODES{REPLY}->{REPLY_ADDR_NOT_SUPPORTED});
1171 return 1;
1172 push @{${*$self}->{SOCKS}->{queue}}, [
1173 '_socks5_accept_command_reply', [ REPLY_ADDR_NOT_SUPPORTED, '0.0.0.0', 0 ], undef, [], 0,
1174 sub {
1175 $! = ESOCKSPROTO;
1176 $SOCKS_ERROR->set(REPLY_ADDR_NOT_SUPPORTED, $@ = $CODES{REPLY}->{REPLY_ADDR_NOT_SUPPORTED});
1177 }
1178 ];
1179
1180 return 0;
11721181 }
11731182
11741183 $request = $self->_socks_read(2, ++$reads)
13241333
13251334 if (defined(${*$self}->{SOCKS}->{UserAuth})) {
13261335 unless (&{ ${*$self}->{SOCKS}->{UserAuth} }($userid)) {
1327 ${*$self}->{SOCKS}->{queue} = [ [ '_socks4_accept_command_reply', [ REQUEST_REJECTED_USERID, '0.0.0.0', 0 ], undef, [], 0 ] ];
1328 $! = ESOCKSPROTO;
1329 $SOCKS_ERROR->set(REQUEST_REJECTED_USERID, $@ = 'Authentication failed with SOCKS4 proxy');
1330 return 1;
1336 push @{${*$self}->{SOCKS}->{queue}}, [
1337 '_socks4_accept_command_reply', [ REQUEST_REJECTED_USERID, '0.0.0.0', 0 ], undef, [], 0,
1338 sub {
1339 $! = ESOCKSPROTO;
1340 $SOCKS_ERROR->set(REQUEST_REJECTED_USERID, $@ = 'Authentication failed with SOCKS4 proxy');
1341 }
1342 ];
1343
1344 return 0;
13311345 }
13321346 }
13331347