mirror of https://github.com/D4-project/d4-core
fix: [server] buffer
parent
afa8edd08e
commit
64924db80a
|
@ -22,14 +22,16 @@ from uuid import UUID
|
||||||
hmac_reset = bytearray(32)
|
hmac_reset = bytearray(32)
|
||||||
hmac_key = b'private key to change\n'
|
hmac_key = b'private key to change\n'
|
||||||
|
|
||||||
|
timeout_time = 30
|
||||||
|
|
||||||
|
header_size = 62
|
||||||
|
|
||||||
redis_server = redis.StrictRedis(
|
redis_server = redis.StrictRedis(
|
||||||
host="localhost",
|
host="localhost",
|
||||||
port=6379,
|
port=6379,
|
||||||
db=0,
|
db=0,
|
||||||
decode_responses=True)
|
decode_responses=True)
|
||||||
|
|
||||||
timeout_time = 30
|
|
||||||
|
|
||||||
class Echo(Protocol, TimeoutMixin):
|
class Echo(Protocol, TimeoutMixin):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -49,7 +51,7 @@ class Echo(Protocol, TimeoutMixin):
|
||||||
|
|
||||||
def unpack_header(self, data):
|
def unpack_header(self, data):
|
||||||
data_header = {}
|
data_header = {}
|
||||||
if len(data) > 62:
|
if len(data) >= header_size:
|
||||||
data_header['version'] = struct.unpack('B', data[0:1])[0]
|
data_header['version'] = struct.unpack('B', data[0:1])[0]
|
||||||
data_header['type'] = struct.unpack('B', data[1:2])[0]
|
data_header['type'] = struct.unpack('B', data[1:2])[0]
|
||||||
data_header['uuid_header'] = data[2:18].hex()
|
data_header['uuid_header'] = data[2:18].hex()
|
||||||
|
@ -79,12 +81,12 @@ class Echo(Protocol, TimeoutMixin):
|
||||||
if data_header:
|
if data_header:
|
||||||
if self.is_valid_header(data_header['uuid_header']):
|
if self.is_valid_header(data_header['uuid_header']):
|
||||||
# check data size
|
# check data size
|
||||||
if data_header['size'] == (len(data) - 62):
|
if data_header['size'] == (len(data) - header_size):
|
||||||
self.process_d4_data(data, data_header)
|
self.process_d4_data(data, data_header)
|
||||||
# multiple d4 headers
|
# multiple d4 headers
|
||||||
elif data_header['size'] < (len(data) - 62):
|
elif data_header['size'] < (len(data) - header_size):
|
||||||
next_data = data[data_header['size'] + 62:]
|
next_data = data[data_header['size'] + header_size:]
|
||||||
data = data[:data_header['size'] + 62]
|
data = data[:data_header['size'] + header_size]
|
||||||
#print('------------------------------------------------')
|
#print('------------------------------------------------')
|
||||||
#print(data)
|
#print(data)
|
||||||
#print()
|
#print()
|
||||||
|
@ -92,16 +94,16 @@ class Echo(Protocol, TimeoutMixin):
|
||||||
self.process_d4_data(data, data_header)
|
self.process_d4_data(data, data_header)
|
||||||
# process next d4 header
|
# process next d4 header
|
||||||
self.process_header(next_data)
|
self.process_header(next_data)
|
||||||
# data_header['size'] > (len(data) - 62)
|
# data_header['size'] > (len(data) - header_size)
|
||||||
# buffer the data
|
# buffer the data
|
||||||
else:
|
else:
|
||||||
#print('**********************************************************')
|
#print('**********************************************************')
|
||||||
#print(data)
|
#print(data)
|
||||||
#print(data_header['size'])
|
#print(data_header['size'])
|
||||||
#print((len(data) - 62))
|
#print((len(data) - header_size))
|
||||||
self.buffer += data
|
self.buffer += data
|
||||||
else:
|
else:
|
||||||
if len(data) < 62:
|
if len(data) < header_size:
|
||||||
self.buffer += data
|
self.buffer += data
|
||||||
else:
|
else:
|
||||||
print('discard data')
|
print('discard data')
|
||||||
|
@ -110,7 +112,7 @@ class Echo(Protocol, TimeoutMixin):
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
#sys.exit(1)
|
#sys.exit(1)
|
||||||
else:
|
else:
|
||||||
if len(data) < 62:
|
if len(data) < header_size:
|
||||||
self.buffer += data
|
self.buffer += data
|
||||||
else:
|
else:
|
||||||
print('error discard data')
|
print('error discard data')
|
||||||
|
@ -122,7 +124,7 @@ class Echo(Protocol, TimeoutMixin):
|
||||||
# not a header
|
# not a header
|
||||||
else:
|
else:
|
||||||
# add previous data
|
# add previous data
|
||||||
if len(data) < 62:
|
if len(data) < header_size:
|
||||||
self.buffer += data
|
self.buffer += data
|
||||||
print(self.buffer)
|
print(self.buffer)
|
||||||
print(len(self.buffer))
|
print(len(self.buffer))
|
||||||
|
@ -156,9 +158,9 @@ class Echo(Protocol, TimeoutMixin):
|
||||||
|
|
||||||
if data_header['hmac_header'] == HMAC.hexdigest():
|
if data_header['hmac_header'] == HMAC.hexdigest():
|
||||||
#print('hmac match')
|
#print('hmac match')
|
||||||
#redis_server.xadd('stream:{}'.format(data_header['type']), {'message': data[62:], 'uuid': data_header['uuid_header'], 'timestamp': data_header['timestamp'], 'version': data_header['version']})
|
#redis_server.xadd('stream:{}'.format(data_header['type']), {'message': data[header_size:], 'uuid': data_header['uuid_header'], 'timestamp': data_header['timestamp'], 'version': data_header['version']})
|
||||||
with open(data_header['uuid_header'], 'ab') as f:
|
with open(data_header['uuid_header'], 'ab') as f:
|
||||||
f.write(data[62:])
|
f.write(data[header_size:])
|
||||||
else:
|
else:
|
||||||
print('hmac do not match')
|
print('hmac do not match')
|
||||||
print(data)
|
print(data)
|
||||||
|
|
Loading…
Reference in New Issue