Ejemplo n.º 1
0
 @Override
 public StateEnum onExit(
     ChannelBuffer buffer, IcapMessageDecoder icapMessageDecoder, Object decisionInformation)
     throws DecodingException {
   IcapMessage message = icapMessageDecoder.message;
   Encapsulated encapsulated = message.getEncapsulatedHeader();
   if (message instanceof IcapRequest
       && ((IcapRequest) message).getMethod().equals(IcapMethod.OPTIONS)) {
     if (encapsulated != null && encapsulated.containsEntry(IcapMessageElementEnum.OPTBODY)) {
       return StateEnum.READ_CHUNK_SIZE_STATE;
     } else {
       return null;
     }
   } else {
     IcapMessageElementEnum entry = encapsulated.getNextEntry();
     if (entry != null) {
       if (entry.equals(IcapMessageElementEnum.REQHDR)) {
         return StateEnum.READ_HTTP_REQUEST_INITIAL_AND_HEADERS;
       } else if (entry.equals(IcapMessageElementEnum.RESHDR)) {
         return StateEnum.READ_HTTP_RESPONSE_INITIAL_AND_HEADERS;
       } else if (entry.equals(IcapMessageElementEnum.REQBODY)) {
         return StateEnum.READ_CHUNK_SIZE_STATE;
       } else if (entry.equals(IcapMessageElementEnum.RESBODY)) {
         return StateEnum.READ_CHUNK_SIZE_STATE;
       }
     }
   }
   return null;
 }
Ejemplo n.º 2
0
  @Override
  public StateReturnValue execute(ChannelBuffer buffer, IcapMessageDecoder icapMessageDecoder)
      throws DecodingException {
    List<String[]> headerList =
        IcapDecoderUtil.readHeaders(buffer, icapMessageDecoder.maxIcapHeaderSize);
    icapMessageDecoder.message.clearHeaders();
    for (String[] header : headerList) {
      icapMessageDecoder.message.addHeader(header[0], header[1]);
    }
    boolean isRequest = icapMessageDecoder.message instanceof IcapRequest;
    boolean isOptionsRequest =
        isRequest
            && ((IcapRequest) icapMessageDecoder.message).getMethod().equals(IcapMethod.OPTIONS);

    handleEncapsulationHeaderVolatility(icapMessageDecoder.message);
    validateMandatoryMessageHeaders(icapMessageDecoder.message);

    Encapsulated encapsulated = null;
    String headerValue = icapMessageDecoder.message.getHeader(IcapHeaders.Names.ENCAPSULATED);
    if (headerValue != null) {
      encapsulated =
          new Encapsulated(icapMessageDecoder.message.getHeader(IcapHeaders.Names.ENCAPSULATED));
      icapMessageDecoder.message.setEncapsulatedHeader(encapsulated);
    }
    if (isOptionsRequest) {
      return StateReturnValue.createRelevantResult(icapMessageDecoder.message);
    } else if (encapsulated != null
        && !encapsulated.containsEntry(IcapMessageElementEnum.REQHDR)
            & !encapsulated.containsEntry(IcapMessageElementEnum.RESHDR)) {
      return StateReturnValue.createRelevantResult(icapMessageDecoder.message);
    }
    return StateReturnValue.createIrrelevantResult();
  }