@SuppressWarnings("deprecation") private SpdySynReplyFrame createSynReplyFrame(HttpResponse httpResponse) throws Exception { // Get the Stream-ID from the headers final HttpHeaders httpHeaders = httpResponse.headers(); int streamID = httpHeaders.getInt(Names.STREAM_ID); httpHeaders.remove(Names.STREAM_ID); // The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding // headers are not valid and MUST not be sent. httpHeaders.remove(HttpHeaders.Names.CONNECTION); httpHeaders.remove(HttpHeaders.Names.KEEP_ALIVE); httpHeaders.remove(HttpHeaders.Names.PROXY_CONNECTION); httpHeaders.remove(HttpHeaders.Names.TRANSFER_ENCODING); SpdySynReplyFrame spdySynReplyFrame = new DefaultSpdySynReplyFrame(streamID); SpdyHeaders frameHeaders = spdySynReplyFrame.headers(); // Unfold the first line of the response into name/value pairs frameHeaders.set(STATUS, httpResponse.status()); frameHeaders.set(VERSION, httpResponse.protocolVersion()); // Transfer the remaining HTTP headers for (Map.Entry<String, String> entry : httpHeaders) { spdySynReplyFrame.headers().add(entry.getKey(), entry.getValue()); } currentStreamId = streamID; spdySynReplyFrame.setLast(isLast(httpResponse)); return spdySynReplyFrame; }
@Override protected void encodeInitialLine(final ByteBuf buf, final HttpMessage message) throws Exception { if (message instanceof HttpRequest) { HttpRequest request = (HttpRequest) message; ByteBufUtil.writeAscii(buf, request.method().asciiName()); buf.writeByte(SP); buf.writeBytes(request.uri().getBytes(CharsetUtil.UTF_8)); buf.writeByte(SP); ByteBufUtil.writeAscii(buf, request.protocolVersion().text()); buf.writeBytes(CRLF); } else if (message instanceof HttpResponse) { HttpResponse response = (HttpResponse) message; ByteBufUtil.writeAscii(buf, response.protocolVersion().text()); buf.writeByte(SP); buf.writeBytes(String.valueOf(response.status().code()).getBytes(CharsetUtil.US_ASCII)); buf.writeByte(SP); ByteBufUtil.writeAscii(buf, response.status().reasonPhrase()); buf.writeBytes(CRLF); } else { throw new UnsupportedMessageTypeException( "Unsupported type " + StringUtil.simpleClassName(message)); } }
@Override public HttpResponseStatus status() { return response.status(); }
@Override public int getStatus() { return response.status().code(); }
@SuppressWarnings("deprecation") private SpdySynStreamFrame createSynStreamFrame(HttpMessage httpMessage) throws Exception { // Get the Stream-ID, Associated-To-Stream-ID, Priority, URL, and scheme from the headers final HttpHeaders httpHeaders = httpMessage.headers(); int streamID = httpHeaders.getInt(Names.STREAM_ID); int associatedToStreamId = httpHeaders.getInt(Names.ASSOCIATED_TO_STREAM_ID, 0); byte priority = (byte) httpHeaders.getInt(Names.PRIORITY, 0); String URL = httpHeaders.get(Names.URL); String scheme = httpHeaders.get(Names.SCHEME); httpHeaders.remove(Names.STREAM_ID); httpHeaders.remove(Names.ASSOCIATED_TO_STREAM_ID); httpHeaders.remove(Names.PRIORITY); httpHeaders.remove(Names.URL); httpHeaders.remove(Names.SCHEME); // The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding // headers are not valid and MUST not be sent. httpHeaders.remove(HttpHeaders.Names.CONNECTION); httpHeaders.remove(HttpHeaders.Names.KEEP_ALIVE); httpHeaders.remove(HttpHeaders.Names.PROXY_CONNECTION); httpHeaders.remove(HttpHeaders.Names.TRANSFER_ENCODING); SpdySynStreamFrame spdySynStreamFrame = new DefaultSpdySynStreamFrame(streamID, associatedToStreamId, priority); // Unfold the first line of the message into name/value pairs SpdyHeaders frameHeaders = spdySynStreamFrame.headers(); if (httpMessage instanceof FullHttpRequest) { HttpRequest httpRequest = (HttpRequest) httpMessage; frameHeaders.set(METHOD, httpRequest.method()); frameHeaders.set(PATH, httpRequest.uri()); frameHeaders.set(VERSION, httpMessage.protocolVersion()); } if (httpMessage instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) httpMessage; frameHeaders.set(STATUS, httpResponse.status()); frameHeaders.set(PATH, URL); frameHeaders.set(VERSION, httpMessage.protocolVersion()); spdySynStreamFrame.setUnidirectional(true); } // Replace the HTTP host header with the SPDY host header if (spdyVersion >= 3) { CharSequence host = httpHeaders.getUnconverted(HttpHeaders.Names.HOST); httpHeaders.remove(HttpHeaders.Names.HOST); frameHeaders.set(HOST, host); } // Set the SPDY scheme header if (scheme == null) { scheme = "https"; } frameHeaders.set(SCHEME, scheme); // Transfer the remaining HTTP headers for (Map.Entry<String, String> entry : httpHeaders) { frameHeaders.add(entry.getKey(), entry.getValue()); } currentStreamId = spdySynStreamFrame.streamId(); spdySynStreamFrame.setLast(isLast(httpMessage)); return spdySynStreamFrame; }