Example #1
0
  @Override
  public Object encode(ChannelHandlerContext ctx, Object msg) throws Exception {

    List<Object> out = new ArrayList<Object>();
    if (msg instanceof HttpRequest) {

      HttpRequest httpRequest = (HttpRequest) msg;
      SpdySynStreamFrame spdySynStreamFrame = createSynStreamFrame(httpRequest);
      int streamID = spdySynStreamFrame.getStreamID();
      out.add(spdySynStreamFrame);
      addContent(out, streamID, httpRequest);

    } else if (msg instanceof HttpResponse) {

      HttpResponse httpResponse = (HttpResponse) msg;
      if (httpResponse.containsHeader(SpdyHttpHeaders.Names.ASSOCIATED_TO_STREAM_ID)) {
        SpdySynStreamFrame spdySynStreamFrame = createSynStreamFrame(httpResponse);
        int streamID = spdySynStreamFrame.getStreamID();
        out.add(spdySynStreamFrame);
        addContent(out, streamID, httpResponse);
      } else {
        SpdySynReplyFrame spdySynReplyFrame = createSynReplyFrame(httpResponse);
        int streamID = spdySynReplyFrame.getStreamID();
        out.add(spdySynReplyFrame);
        addContent(out, streamID, httpResponse);
      }

    } else if (msg instanceof HttpChunk) {

      HttpChunk chunk = (HttpChunk) msg;
      SpdyDataFrame spdyDataFrame = new DefaultSpdyDataFrame(currentStreamID);
      spdyDataFrame.setData(chunk.getContent());
      spdyDataFrame.setLast(chunk.isLast());

      if (chunk instanceof HttpChunkTrailer) {
        HttpChunkTrailer trailer = (HttpChunkTrailer) chunk;
        List<Map.Entry<String, String>> trailers = trailer.getHeaders();
        if (trailers.isEmpty()) {
          out.add(spdyDataFrame);
        } else {
          // Create SPDY HEADERS frame out of trailers
          SpdyHeadersFrame spdyHeadersFrame = new DefaultSpdyHeadersFrame(currentStreamID);
          for (Map.Entry<String, String> entry : trailers) {
            spdyHeadersFrame.addHeader(entry.getKey(), entry.getValue());
          }

          // Write HEADERS frame and append Data Frame
          out.add(spdyHeadersFrame);
          out.add(spdyDataFrame);
        }
      } else {
        out.add(spdyDataFrame);
      }
    } else {
      throw new UnsupportedMessageTypeException(msg);
    }

    return out.toArray();
  }
Example #2
0
  private static void addContent(List<Object> out, int streamID, HttpMessage httpMessage) {
    if (!httpMessage.getContent().readable()) {
      return;
    }

    // Create SPDY Data Frame out of message content
    SpdyDataFrame spdyDataFrame = new DefaultSpdyDataFrame(streamID);
    spdyDataFrame.setData(httpMessage.getContent());
    spdyDataFrame.setLast(true);

    out.add(spdyDataFrame);
  }