/*
* Copyright 2012 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 io.netty.handler.codec.http.websocketx;
import io.netty.handler.codec.http.DefaultFullHttpRequest;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpHeaderValues;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpVersion;
import static io.netty.handler.codec.http.HttpVersion.*;
public class WebSocketRequestBuilder {
private HttpVersion httpVersion;
private HttpMethod method;
private String uri;
private String host;
private String upgrade;
private String connection;
private String key;
private String origin;
private WebSocketVersion version;
public WebSocketRequestBuilder httpVersion(HttpVersion httpVersion) {
this.httpVersion = httpVersion;
return this;
}
public WebSocketRequestBuilder method(HttpMethod method) {
this.method = method;
return this;
}
public WebSocketRequestBuilder uri(CharSequence uri) {
if (uri == null) {
this.uri = null;
} else {
this.uri = uri.toString();
}
return this;
}
public WebSocketRequestBuilder host(CharSequence host) {
if (host == null) {
this.host = null;
} else {
this.host = host.toString();
}
return this;
}
public WebSocketRequestBuilder upgrade(CharSequence upgrade) {
if (upgrade == null) {
this.upgrade = null;
} else {
this.upgrade = upgrade.toString();
}
return this;
}
public WebSocketRequestBuilder connection(CharSequence connection) {
if (connection == null) {
this.connection = null;
} else {
this.connection = connection.toString();
}
return this;
}
public WebSocketRequestBuilder key(CharSequence key) {
if (key == null) {
this.key = null;
} else {
this.key = key.toString();
}
return this;
}
public WebSocketRequestBuilder origin(CharSequence origin) {
if (origin == null) {
this.origin = null;
} else {
this.origin = origin.toString();
}
return this;
}
public WebSocketRequestBuilder version13() {
version = WebSocketVersion.V13;
return this;
}
public WebSocketRequestBuilder version8() {
version = WebSocketVersion.V08;
return this;
}
public WebSocketRequestBuilder version00() {
version = null;
return this;
}
public WebSocketRequestBuilder noVersion() {
return this;
}
public FullHttpRequest build() {
FullHttpRequest req = new DefaultFullHttpRequest(httpVersion, method, uri);
HttpHeaders headers = req.headers();
if (host != null) {
headers.set(HttpHeaderNames.HOST, host);
}
if (upgrade != null) {
headers.set(HttpHeaderNames.UPGRADE, upgrade);
}
if (connection != null) {
headers.set(HttpHeaderNames.CONNECTION, connection);
}
if (key != null) {
headers.set(HttpHeaderNames.SEC_WEBSOCKET_KEY, key);
}
if (origin != null) {
headers.set(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, origin);
}
if (version != null) {
headers.set(HttpHeaderNames.SEC_WEBSOCKET_VERSION, version.toHttpHeaderValue());
}
return req;
}
public static HttpRequest successful() {
return new WebSocketRequestBuilder().httpVersion(HTTP_1_1)
.method(HttpMethod.GET)
.uri("/test")
.host("server.example.com")
.upgrade(HttpHeaderValues.WEBSOCKET)
.key("dGhlIHNhbXBsZSBub25jZQ==")
.origin("http://example.com")
.version13()
.build();
}
}