From fef3ee8efe912b0e4a09782768387cb35390d69c Mon Sep 17 00:00:00 2001 From: Cleve Lendon Date: Fri, 26 Jun 2015 12:14:01 +0900 Subject: [PATCH] Fix websockets. Connection must be Upgrade, not keep-alive, Upgrade --- src/http.c | 9 ++++++--- src/websocket.c | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/http.c b/src/http.c index d60266f..8e100e2 100644 --- a/src/http.c +++ b/src/http.c @@ -466,6 +466,7 @@ http_response(struct http_request *req, int status, void *d, u_int32_t l) http_response_spdy(req, req->owner, req->stream, status, d, l); break; case CONN_PROTO_HTTP: + case CONN_PROTO_WEBSOCKET: http_response_normal(req, req->owner, status, d, l); break; default: @@ -1247,9 +1248,11 @@ http_response_normal(struct http_request *req, struct connection *c, } if (http_keepalive_time && connection_close == 0) { - kore_buf_appendf(header_buf, "connection: keep-alive\r\n"); - kore_buf_appendf(header_buf, "keep-alive: timeout=%d\r\n", - http_keepalive_time); + if (req->owner->proto != CONN_PROTO_WEBSOCKET) { + kore_buf_appendf(header_buf, "connection: keep-alive\r\n"); + kore_buf_appendf(header_buf, "keep-alive: timeout=%d\r\n", + http_keepalive_time); + } } else { c->flags |= CONN_CLOSE_EMPTY; kore_buf_appendf(header_buf, "connection: close\r\n"); diff --git a/src/websocket.c b/src/websocket.c index 17e06aa..e3dad6b 100644 --- a/src/websocket.c +++ b/src/websocket.c @@ -98,12 +98,12 @@ kore_websocket_handshake(struct http_request *req, struct kore_wscbs *wscbs) kore_debug("%p: new websocket connection", req->owner); + req->owner->proto = CONN_PROTO_WEBSOCKET; http_response(req, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, 0); net_recv_reset(req->owner, WEBSOCKET_FRAME_HDR, websocket_recv_opcode); req->owner->disconnect = websocket_disconnect; req->owner->rnb->flags &= ~NETBUF_CALL_CB_ALWAYS; - req->owner->proto = CONN_PROTO_WEBSOCKET; req->owner->wscbs = wscbs; req->owner->idle_timer.start = kore_time_ms();