if self.zipper.check_threshold(buffer):
response = self.send_raw_msg(self.zipper.compress(buffer))
- if response:
- response = self.zipper.decompress(response)
else:
response = self.send_raw_msg(buffer)
if not response:
return response
+ elif self.zipper.is_compressed(response):
+ response = self.zipper.decompress(response)
# return to string
response = response.decode()
MSG_COMPRESS_THRESHOLD = 256
MSG_COMPRESS_HEADER_MAGIC = 0xABE85CEA
- def check_threshold (self, msg):
+ def check_threshold(self, msg):
return len(msg) >= self.MSG_COMPRESS_THRESHOLD
def compress (self, msg):
return new_msg
- def decompress (self, msg):
+ def decompress(self, msg):
if len(msg) < 8:
return None
return x
+
+ def is_compressed(self, msg):
+ if len(msg) < 8:
+ return False
+
+ t = struct.unpack(">II", msg[:8])
+ if (t[0] != self.MSG_COMPRESS_HEADER_MAGIC):
+ return False
+
+ return True
+
+
void TrexRpcServerReqRes::handle_request(const std::string &request) {
std::string response;
+ if ( request.size() > MAX_RPC_MSG_LEN ) {
+ response = "Request is too large (" + std::to_string(request.size()) + " bytes). Consider splitting to smaller chunks.";
+ handle_server_error(response);
+ return;
+ }
+
process_request(request, response);
zmq_send(m_socket, response.c_str(), response.size(), 0);
void *m_context;
void *m_socket;
+ static const uint32_t MAX_RPC_MSG_LEN = 999999;
};
/**