@Override public boolean hasHeader(String name) { return httpRequest.containsHeader(name); }
@Override public boolean matches() { return req.containsHeader(SEC_WEBSOCKET_KEY1) && req.containsHeader(SEC_WEBSOCKET_KEY2); }
private Integer getHybiVersion() { return req.containsHeader(SEC_WEBSOCKET_VERSION) ? Integer.parseInt(req.getHeader(SEC_WEBSOCKET_VERSION).trim()) : null; }
@Override public boolean hasHeader(String name) { return httpRequest.containsHeader(name); }
@Override public boolean containsHeader(String name) { return request.containsHeader(name); }
public boolean matches(HttpRequest request) { return (request.containsHeader( Names.SEC_WEBSOCKET_KEY1 ) && request.containsHeader( Names.SEC_WEBSOCKET_KEY2 )); }
@Override public boolean matches() { return req.containsHeader(SEC_WEBSOCKET_KEY1) && req.containsHeader(SEC_WEBSOCKET_KEY2); }
public static boolean matches(HttpRequest request) { return (request.containsHeader("Sec-WebSocket-Key1") && request.containsHeader("Sec-WebSocket-Key2")); }
public static boolean matches(HttpRequest request) { String sVers = request.getHeader("Sec-WebSocket-Version"); if (sVers != null) { Integer ver = Integer.parseInt(sVers); return request.containsHeader("Sec-WebSocket-Key") && ver >= 7; } else { return false; } }
public static boolean matches(HttpRequest request) { String sVers = request.getHeader("Sec-WebSocket-Version"); if (sVers != null) { Integer ver = Integer.parseInt(sVers); return request.containsHeader("Sec-WebSocket-Key") && ver == 13; } else { return false; } }
private Integer getHybiVersion() { return req.containsHeader(SEC_WEBSOCKET_VERSION) ? Integer.parseInt(req.getHeader(SEC_WEBSOCKET_VERSION).trim()) : null; }
public boolean matches(HttpRequest request) { return (request.containsHeader( "Sec-WebSocket-Key" ) && getVersion().equals( request.getHeader( "Sec-WebSocket-Version" ) )); }
public boolean matches(HttpRequest request) { return (request.containsHeader( "Sec-WebSocket-Key" ) && getVersion().equals( request.getHeader( "Sec-WebSocket-Version" ) )); }
public boolean matches(HttpRequest request) { return (request.containsHeader( "Sec-WebSocket-Key" ) && getVersion().equals( request.getHeader( "Sec-WebSocket-Version" ) )); }
@Override public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent evt) throws Exception { final HttpRequest req = (HttpRequest)evt.getMessage(); synchronized(this) { if (req.containsHeader(HeaderCSeq)) { m_cseq = req.getHeader(HeaderCSeq); } else { throw new ProtocolException("No CSeq header"); } } super.messageReceived(ctx, evt); }
@Override public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent evt) throws Exception { final HttpRequest req = (HttpRequest)evt.getMessage(); synchronized(this) { if (req.containsHeader(HeaderChallenge)) { /* The challenge is sent without padding! */ final byte[] challenge = Base64.decodeUnpadded(req.getHeader(HeaderChallenge)); /* Verify that we got 16 bytes */ if (challenge.length != 16) throw new ProtocolException("Invalid Apple-Challenge header, " + challenge.length + " instead of 16 bytes"); /* Remember challenge and local address. * Both are required to compute the response */ m_challenge = challenge; m_localAddress = ((InetSocketAddress)ctx.getChannel().getLocalAddress()).getAddress(); } else { /* Forget last challenge */ m_challenge = null; m_localAddress = null; } } super.messageReceived(ctx, evt); }
if (!req.containsHeader(HeaderTransport)) throw new ProtocolException("No Transport header");
private HttpResponse processHandshake(HttpRequest request) throws NoSuchAlgorithmException { HttpResponse response; // HttpHeaders.Names.WEBSOCKET_ORIGIN; HttpHeaders.Names.WEBSOCKET_LOCATION not checked because of lack of compatibility on client side if (!hasHeaderWithValue(request, HttpHeaders.Names.CONNECTION, HttpHeaders.Values.UPGRADE) || !hasHeaderWithValue(request, HttpHeaders.Names.UPGRADE, HttpHeaders.Values.WEBSOCKET)) { // bad handshake, error message will be sent connection will be closed return new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN); } if (hasBadProtocolHeader(request)) { // bad protocol, send special error code saying that server does not agree to any of the client's requested sub protocols return new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.NOT_ACCEPTABLE); } if (request.containsHeader(ExtendedHttpHeaders.Names.SEC_WEBSOCKET_VERSION)) { // treat this request as Hybi draft 4+ handshake (validated according to Websocket Hybi draft 10 version) response = processHybiHandshake(request); } else { // treat this request as Hixie-76/Hybi-0 handshake (validated according to Websocket Hixie-76 version) response = processHixieHandshake(request); } return response; }
if (req.containsHeader(Names.SEC_WEBSOCKET_KEY1) && req.containsHeader(Names.SEC_WEBSOCKET_KEY2)) {
public void handle(HttpRequest request, HttpResponse response) { QueryStringDecoder qsd = new QueryStringDecoder(request.getUri()); String path = qsd.getPath(); if (!path.matches(".*/iframe[0-9-.a-z_]*.html")) { response.setStatus(HttpResponseStatus.NOT_FOUND); response.setContent(ChannelBuffers.copiedBuffer("Not found", CharsetUtil.UTF_8)); return; } response.setHeader(HttpHeaders.Names.SET_COOKIE, "JSESSIONID=dummy; path=/"); if (request.containsHeader(HttpHeaders.Names.IF_NONE_MATCH)) { response.setStatus(HttpResponseStatus.NOT_MODIFIED); response.removeHeader(HttpHeaders.Names.CONTENT_TYPE); } else { response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "text/html; charset=UTF-8"); response.setHeader(HttpHeaders.Names.CACHE_CONTROL, "max-age=31536000, public"); response.setHeader(HttpHeaders.Names.EXPIRES, "FIXME"); // FIXME: Fix this response.removeHeader(HttpHeaders.Names.SET_COOKIE); response.setContent(content); } response.setHeader(HttpHeaders.Names.ETAG, etag); }