# coding: utf-8
import socket
import struct
import hashlib, base64
import threading
import time
import datetime
connectionlist = {} # 存放链接客户fd,元组
g_code_length = 0
g_header_length = 0 # websocket数据头部长度
PRINT_FLAG = True
# 计算web端提交的数据长度并返回
def get_datalength(msg):
global g_code_length
global g_header_length
try:
g_code_length = msg[1] & 127
if g_code_length == 126:
g_code_length = struct.unpack('>H', msg[2:4])[0]
g_header_length = 8
elif g_code_length == 127:
g_code_length = struct.unpack('>Q', msg[2:10])[0]
g_header_length = 14
else:
g_header_length = 6
g_code_length = int(g_code_length)
except Exception as e:
pass
return g_code_length
# 解析web端提交的bytes信息,返回str信息(可以解析中文信息)
def parse_data(msg):
global g_code_length
g_code_length = msg[1] & 127
if g_code_length == 126:
g_code_length = struct.unpack('>H', msg[2:4])[0]
masks = msg[4:8]
data = msg[8:]
elif g_code_length == 127:
g_code_length = struct.unpack('>Q', msg[2:10])[0]
masks = msg[10:14]
data = msg[14:]
else:
masks = msg[2:6]
data = msg[6:]
en_bytes = b""
cn_bytes = []
for i, d in enumerate(data):
nv = chr(d ^ masks[i % 4])
nv_bytes = nv.encode()
nv_len = len(nv_bytes)
if nv_len == 1:
en_bytes += nv_bytes
else:
en_bytes += b'%s'
cn_bytes.append(ord(nv_bytes.decode()))
if len(cn_bytes) > 2:
cn_str = ""
clen = len(cn_bytes)
count = int(clen / 3)
for x in range(count):
i = x * 3
b = bytes([cn_bytes[i], cn_bytes