in apisix/runner/http/request.py [0:0]
def __ask_extra_info(self, builder: flatbuffers.Builder, ty, data) -> str:
"""
nginx built-in variable and request body rpc calls
:param builder:
:param ty:
:param data:
:return:
"""
res_val = []
EIReq.Start(builder)
EIReq.AddInfoType(builder, ty)
EIReq.AddInfo(builder, data)
res = EIReq.End(builder)
builder.Finish(res)
out = builder.Output()
try:
protocol = RunnerServerProtocol(out, runner_utils.RPC_EXTRA_INFO)
protocol.encode()
self.r.conn.sendall(protocol.buffer)
except socket.timeout as e:
self.r.log.info("connection timout: {}", e.args.__str__())
except socket.error as e:
self.r.log.error("connection error: {}", e.args.__str__())
except BaseException as e:
self.r.log.error("any error: {}", e.args.__str__())
else:
buf = self.r.conn.recv(runner_utils.RPC_PROTOCOL_HEADER_LEN)
protocol = RunnerServerProtocol(buf, 0)
err = protocol.decode()
if err.code == RESP_STATUS_CODE_OK:
buf = self.r.conn.recv(protocol.length)
resp = EIResp.Resp.GetRootAs(buf)
for i in range(resp.ResultLength()):
vector = resp.Result(i)
res_val.append(chr(vector))
else:
self.r.log.error(err.message)
return "".join(res_val)