sendReq method

  1. @override
Future<Response?> sendReq(
  1. String url,
  2. ReqInfo params,
  3. String method
)
override

Implementation

@override
Future<Response?> sendReq(String url, ReqInfo params, String method) async {
  var now = DateTime.now();
  await setUpTransport();
  if (transport == null) {
    log.error("PlasoHttp2Client@sendReq: transport is null", null);
    return null;
  }
  var stream = transport!.makeRequest(initHeader(url, params));
  log.debug('PlasoHttp2Client@sendReq: will send $url', null);
  stream.sendData(Utf8Encoder().convert(params.content), endStream: true);
  List<int> messages = [];
  String? contentType;
  late String status;
  try {
    log.debug('PlasoHttp2Client@sendReq: wait for response', null);
    await for (var message in stream.incomingMessages.timeout(timeout)) {
      if (message is HeadersStreamMessage) {
        for (var header in message.headers) {
          var name = utf8.decode(header.name);
          var a = DateTime.now();
          if (a.difference(now) > Duration(seconds: 10)) {
            log.debug(
                "PlasoHttp2Client@sendReq: $name=${utf8.decode(header.value)}",
                null);
          }
          if (name == "content-type") {
            contentType = utf8.decode(header.value);
          }
          if (name == ":status") {
            status = utf8.decode(header.value);
          }
        }
      } else if (message is DataStreamMessage) {
        messages.addAll(message.bytes);
      }
    }
  } catch (err, stack) {
    log.error("PlasoHttp2Client@sendReq: http2 error $err", null);
    log.error(stack, null);
    return null;
  }
  var resbody = Utf8Decoder().convert(messages);
  log.debug("PlasoHttp2Client@sendReq: response: $resbody", null);
  return Response(
      body: resbody, contentType: contentType, status: int.parse(status));
}