/*
* Copyright 2013 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License, version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
* for the specific language governing permissions and limitations under the License.
*/
package org.jboss.aerogear.io.netty.handler.codec.sockjs.util;
import static io.netty.handler.codec.http.HttpHeaders.Values.WEBSOCKET;
import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
import io.netty.buffer.ByteBuf;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.http.*;
import io.netty.handler.codec.http.HttpHeaders.Names;
import io.netty.handler.codec.http.websocketx.WebSocketVersion;
public final class HttpUtil {
private HttpUtil() {
}
public static HttpResponse decode(final EmbeddedChannel channel) throws Exception {
final EmbeddedChannel ch = new EmbeddedChannel(new HttpObjectAggregator(8192), new HttpResponseDecoder());
ch.writeInbound(channel.readOutbound());
return (HttpResponse) ch.readInbound();
}
public static FullHttpResponse decodeFullResponse(final EmbeddedChannel channel) throws Exception {
final HttpResponse response = decode(channel);
final ByteBuf content = channel.readOutbound();
final DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(response.getProtocolVersion(),
response.getStatus(), content);
fullResponse.headers().add(response.headers());
return fullResponse;
}
public static FullHttpResponse decodeFullHttpResponse(final EmbeddedChannel channel) throws Exception {
final EmbeddedChannel ch = new EmbeddedChannel(new HttpResponseDecoder());
ch.writeInbound(channel.readOutbound());
final HttpResponse response = ch.readInbound();
final HttpContent content = ch.readInbound();
final DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(response.getProtocolVersion(),
response.getStatus(), content.content());
fullResponse.headers().add(response.headers());
return fullResponse;
}
public static FullHttpRequest webSocketUpgradeRequest(final String path, final WebSocketVersion version) {
final FullHttpRequest req = new DefaultFullHttpRequest(HTTP_1_1, HttpMethod.GET, path);
req.headers().set(Names.HOST, "server.test.com");
req.headers().set(Names.UPGRADE, WEBSOCKET.toString());
req.headers().set(Names.CONNECTION, "Upgrade");
req.headers().set(Names.SEC_WEBSOCKET_KEY, "dGhlIHNhbXBsZSBub25jZQ==");
req.headers().set(Names.SEC_WEBSOCKET_ORIGIN, "http://test.com");
req.headers().set(Names.SEC_WEBSOCKET_VERSION, version.toHttpHeaderValue());
req.retain();
return req;
}
}