parent
74f8f8cb85
commit
4e21f83bd6
3 changed files with 26 additions and 10 deletions
|
@ -641,6 +641,7 @@ class TCPRelayHandler(object):
|
||||||
logging.error(eventloop.get_sock_error(self._remote_sock))
|
logging.error(eventloop.get_sock_error(self._remote_sock))
|
||||||
self.destroy()
|
self.destroy()
|
||||||
|
|
||||||
|
@shell.exception_handle(self_=True, destroy=True)
|
||||||
def handle_event(self, sock, event):
|
def handle_event(self, sock, event):
|
||||||
# handle all events in this handler and dispatch them to methods
|
# handle all events in this handler and dispatch them to methods
|
||||||
if self._stage == STAGE_DESTROYED:
|
if self._stage == STAGE_DESTROYED:
|
||||||
|
|
0
shadowsocks/tunnel.py
Normal file → Executable file
0
shadowsocks/tunnel.py
Normal file → Executable file
|
@ -170,14 +170,16 @@ class UDPRelay(object):
|
||||||
else:
|
else:
|
||||||
data = data[3:]
|
data = data[3:]
|
||||||
else:
|
else:
|
||||||
data, key, iv = cryptor.decrypt_all(self._password,
|
|
||||||
self._method,
|
|
||||||
data)
|
|
||||||
# decrypt data
|
# decrypt data
|
||||||
|
try:
|
||||||
|
data, key, iv = cryptor.decrypt_all(self._password,
|
||||||
|
self._method,
|
||||||
|
data)
|
||||||
|
except Exception:
|
||||||
|
logging.debug('UDP handle_server: decrypt data failed')
|
||||||
|
return
|
||||||
if not data:
|
if not data:
|
||||||
logging.debug(
|
logging.debug('UDP handle_server: data is empty after decrypt')
|
||||||
'UDP handle_server: data is empty after decrypt'
|
|
||||||
)
|
|
||||||
return
|
return
|
||||||
header_result = parse_header(data)
|
header_result = parse_header(data)
|
||||||
if header_result is None:
|
if header_result is None:
|
||||||
|
@ -238,7 +240,11 @@ class UDPRelay(object):
|
||||||
# spec https://shadowsocks.org/en/spec/one-time-auth.html
|
# spec https://shadowsocks.org/en/spec/one-time-auth.html
|
||||||
if self._ota_enable_session:
|
if self._ota_enable_session:
|
||||||
data = self._ota_chunk_data_gen(key, iv, data)
|
data = self._ota_chunk_data_gen(key, iv, data)
|
||||||
data = cryptor.encrypt_all_m(key, iv, m, self._method, data)
|
try:
|
||||||
|
data = cryptor.encrypt_all_m(key, iv, m, self._method, data)
|
||||||
|
except Exception:
|
||||||
|
logging.debug("UDP handle_server: encrypt data failed")
|
||||||
|
return
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
@ -267,12 +273,21 @@ class UDPRelay(object):
|
||||||
# drop
|
# drop
|
||||||
return
|
return
|
||||||
data = pack_addr(r_addr[0]) + struct.pack('>H', r_addr[1]) + data
|
data = pack_addr(r_addr[0]) + struct.pack('>H', r_addr[1]) + data
|
||||||
response = cryptor.encrypt_all(self._password, self._method, data)
|
try:
|
||||||
|
response = cryptor.encrypt_all(self._password,
|
||||||
|
self._method, data)
|
||||||
|
except Exception:
|
||||||
|
logging.debug("UDP handle_client: encrypt data failed")
|
||||||
|
return
|
||||||
if not response:
|
if not response:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
data, key, iv = cryptor.decrypt_all(self._password,
|
try:
|
||||||
self._method, data)
|
data, key, iv = cryptor.decrypt_all(self._password,
|
||||||
|
self._method, data)
|
||||||
|
except Exception:
|
||||||
|
logging.debug('UDP handle_client: decrypt data failed')
|
||||||
|
return
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
header_result = parse_header(data)
|
header_result = parse_header(data)
|
||||||
|
|
Loading…
Add table
Reference in a new issue