fromByteStream static method

Future<Response> fromByteStream(
  1. Stream<List<int>> data
)

Construct a response from byte stream (e.g. TCP socket)

Implementation

static Future<Response> fromByteStream(Stream<List<int>> data) async {
  final List<int> partsBuffer = [];
  final List<int> body = [];

  // pipe stream into parts buffer until CRLF
  // and then pipe to body buffer
  bool partsEnd = false;
  await for (final byte in data.expand((e) => e)) {
    if (partsEnd) {
      body.add(byte);
    } else {
      partsBuffer.add(byte);
      if (partsBuffer.length >= 2 &&
          byte == 10 &&
          partsBuffer[partsBuffer.length - 2] == 13) {
        partsEnd = true;
      }
    }
  }

  final parts = utf8.decode(partsBuffer.sublist(0, partsBuffer.length - 2));

  final statusCode = int.parse(parts.substring(0, 2));
  final meta = parts.substring(3);

  return Response(statusCode: statusCode, meta: meta, body: body);
}