From c10b1e114d135a920b1bd32f92d40120531593c6 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:36:41 +0800 Subject: [PATCH] =?UTF-8?q?http=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/common.py | 10 +++++++++- handler/http_server.py | 4 ++-- handler/utils.py | 19 ++++++++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/handler/common.py b/handler/common.py index e946253..292b2c6 100644 --- a/handler/common.py +++ b/handler/common.py @@ -1,3 +1,11 @@ +import time from queue import SimpleQueue -MESSAGE_QUEUE = SimpleQueue() +MESSAGE_QUEUE: "SimpleQueue[MessagePayload]" = SimpleQueue() + + +class MessagePayload(object): + def __init__(self, body: bytes, timestamp: str = ""): + self.request_timestamp = timestamp + self.body = body + self.curretnt_timestamp = time.time() diff --git a/handler/http_server.py b/handler/http_server.py index 9dc42e1..5529e23 100644 --- a/handler/http_server.py +++ b/handler/http_server.py @@ -1,5 +1,5 @@ from flask import Flask, request, Response -from handler.common import MESSAGE_QUEUE +from handler.common import MESSAGE_QUEUE, MessagePayload import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) @@ -10,6 +10,6 @@ app.config['JSON_AS_ASCII'] = False @app.post("/message") def message_from_mitmproxy(): - payload = request.data + payload = MessagePayload(request.data, request.headers.get("X-MITM-TS", "")) MESSAGE_QUEUE.put(payload) return Response(status=204) \ No newline at end of file diff --git a/handler/utils.py b/handler/utils.py index aa8ab92..8c1adb7 100644 --- a/handler/utils.py +++ b/handler/utils.py @@ -16,18 +16,16 @@ from output import OUTPUTER def loop_queue(): while True: message = MESSAGE_QUEUE.get() - if type(message) == str: - message = message.encode("UTF-8") try: response = message_pb2.Response() wss = wss_pb2.WssResponse() - wss.ParseFromString(message) + wss.ParseFromString(message.body) decompressed = gzip.decompress(wss.data) response.ParseFromString(decompressed) decodeMsg(response.messages) except Exception as e: - # 发出去的信息无法解析 - pass + for output in OUTPUTER: + output.error_output("ParseError", message.body, e) def decodeMsg(messages): for message in messages: @@ -62,7 +60,14 @@ def decodeMsg(messages): room_user_seq_message.set_payload(message.payload) for output in OUTPUTER: output.userseq_output(room_user_seq_message) + elif message.method == 'WebcastControlMessage': + control_message = ControlMessage() + control_message.set_payload(message.payload) + for output in OUTPUTER: + output.control_output(control_message) else: - ... + for output in OUTPUTER: + output.other_output(message.method, message.payload) except Exception as e: - print(e) + for output in OUTPUTER: + output.error_output(message.method, message.payload, e)