pj_crypto_v2/utils/send_receive.py
2019-11-06 17:48:42 +01:00

36 lines
1.1 KiB
Python

#===============================================================
# --- (Un)Pack msg length and msg itself ---
#===============================================================
from struct import *
import asyncio, socket
def send_msg(sock, msg):
# Prefix each message with a 4-byte length (network byte order)
msg = struct.pack('>I', len(msg)) + msg
sock.sendall(msg)
def send_msg_async(writer, msg):
# Prefix each message with a 4-byte length (network byte order)
msg = struct.pack('>I', len(msg)) + msg
writer.write(msg)
#sock.sendall(msg)
def recv_msg(reader):
# Read message length and unpack it into an integer
raw_msglen = reader.read(255)
if not raw_msglen:
return None
msglen = unpack('>I', raw_msglen)[0]
# Read the message data
return recvall(reader)
def recvall(reader, n):
# Helper function to recv n bytes or return None if EOF is hit
data = bytearray()
while len(data) < n:
packet = reader.read(n - len(data))
if not packet:
return None
data.extend(packet)
return data