def __ask_extra_info()

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)