Exemplo n.º 1
0
  @Override
  public ParsingResult decode(Connection connection, HttpContent httpContent) {
    final HttpHeader httpHeader = httpContent.getHttpHeader();
    final Buffer input = httpContent.getContent();
    final TransformationResult<Buffer, Buffer> result = decoder.transform(httpHeader, input);

    Buffer remainder = result.getExternalRemainder();

    if (remainder == null || !remainder.hasRemaining()) {
      input.tryDispose();
      remainder = null;
    } else {
      input.shrink();
    }

    try {
      switch (result.getStatus()) {
        case COMPLETE:
          {
            httpContent.setContent(result.getMessage());
            decoder.finish(httpHeader);
            return ParsingResult.create(httpContent, remainder);
          }

        case INCOMPLETE:
          {
            return ParsingResult.create(null, remainder);
          }

        case ERROR:
          {
            throw new IllegalStateException(
                "LZMA decode error. Code: "
                    + result.getErrorCode()
                    + " Description: "
                    + result.getErrorDescription());
          }

        default:
          throw new IllegalStateException("Unexpected status: " + result.getStatus());
      }
    } finally {
      result.recycle();
    }
  }
Exemplo n.º 2
0
  @Override
  public HttpContent encode(Connection connection, HttpContent httpContent) {

    final HttpHeader httpHeader = httpContent.getHttpHeader();
    final Buffer input = httpContent.getContent();

    if (httpContent.isLast() && !input.hasRemaining()) {
      return httpContent;
    }

    final TransformationResult<Buffer, Buffer> result =
        encoder.transform(httpContent.getHttpHeader(), input);

    input.tryDispose();

    try {
      switch (result.getStatus()) {
        case COMPLETE:
          encoder.finish(httpHeader);
        case INCOMPLETE:
          {
            Buffer encodedBuffer = result.getMessage();
            if (encodedBuffer != null) {
              httpContent.setContent(encodedBuffer);
              return httpContent;
            } else {
              return null;
            }
          }

        case ERROR:
          {
            throw new IllegalStateException(
                "LZMA encode error. Code: "
                    + result.getErrorCode()
                    + " Description: "
                    + result.getErrorDescription());
          }

        default:
          throw new IllegalStateException("Unexpected status: " + result.getStatus());
      }
    } finally {
      result.recycle();
    }
  }