calcRequestSizeBytes static method

int calcRequestSizeBytes(
  1. BaseRequest request,
  2. Map<String, String> additionalRequestHeaders
)

Calculation the bytes of a request depending on the request options.

Implementation

static int calcRequestSizeBytes(
  BaseRequest request,
  Map<String, String> additionalRequestHeaders,
) {
  // 4 Bytes coming from empty line after first line and headers
  var requestLength = 4;

  try {
    requestLength += calcRequestFirstLineLength(
      request.method,
      request.url.path,
      request.url.query,
    );
    // Combining additional headers and request headers. Actual headers go second, so they override the default ones
    requestLength += getHeaderLength({...additionalRequestHeaders, ...request.headers});

    if (request.contentLength != null && request.contentLength! > 0) {
      requestLength += request.contentLength!;

      if (!request.headers.containsKey(DynatraceHttpHeaders.contentTypeHeader)) {
        requestLength += '${DynatraceHttpHeaders.contentTypeHeader}: application/x-www-form-urlencoded'.length + 2;
      }

      if (!request.headers.containsKey(DynatraceHttpHeaders.contentLengthHeader)) {
        requestLength += '${DynatraceHttpHeaders.contentLengthHeader}: ${request.contentLength}'.length + 2;
      }
    }

    if (!request.headers.containsKey('Host')) {
      requestLength += 'Host: ${request.url.authority}'.length + 2;
    }

    return requestLength;
  } catch (error) {
    Logger().d(
      _tag,
      "HttpClientUtils calcRequestSizeBytes(${request.url}): can't calculate request size.",
      logType: LogType.Warning,
    );
    return -1;
  }
}