forked from mirrors/kore
Merge pull request #68 from Indrikoterio/master
Make sure we set connection to upgrade only in websocket responses.
This commit is contained in:
commit
a4e462b36c
|
@ -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);
|
http_response_spdy(req, req->owner, req->stream, status, d, l);
|
||||||
break;
|
break;
|
||||||
case CONN_PROTO_HTTP:
|
case CONN_PROTO_HTTP:
|
||||||
|
case CONN_PROTO_WEBSOCKET:
|
||||||
http_response_normal(req, req->owner, status, d, l);
|
http_response_normal(req, req->owner, status, d, l);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1247,9 +1248,11 @@ http_response_normal(struct http_request *req, struct connection *c,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (http_keepalive_time && connection_close == 0) {
|
if (http_keepalive_time && connection_close == 0) {
|
||||||
kore_buf_appendf(header_buf, "connection: keep-alive\r\n");
|
if (req->owner->proto != CONN_PROTO_WEBSOCKET) {
|
||||||
kore_buf_appendf(header_buf, "keep-alive: timeout=%d\r\n",
|
kore_buf_appendf(header_buf, "connection: keep-alive\r\n");
|
||||||
http_keepalive_time);
|
kore_buf_appendf(header_buf, "keep-alive: timeout=%d\r\n",
|
||||||
|
http_keepalive_time);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
c->flags |= CONN_CLOSE_EMPTY;
|
c->flags |= CONN_CLOSE_EMPTY;
|
||||||
kore_buf_appendf(header_buf, "connection: close\r\n");
|
kore_buf_appendf(header_buf, "connection: close\r\n");
|
||||||
|
|
|
@ -98,12 +98,12 @@ kore_websocket_handshake(struct http_request *req, struct kore_wscbs *wscbs)
|
||||||
|
|
||||||
kore_debug("%p: new websocket connection", req->owner);
|
kore_debug("%p: new websocket connection", req->owner);
|
||||||
|
|
||||||
|
req->owner->proto = CONN_PROTO_WEBSOCKET;
|
||||||
http_response(req, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, 0);
|
http_response(req, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, 0);
|
||||||
net_recv_reset(req->owner, WEBSOCKET_FRAME_HDR, websocket_recv_opcode);
|
net_recv_reset(req->owner, WEBSOCKET_FRAME_HDR, websocket_recv_opcode);
|
||||||
|
|
||||||
req->owner->disconnect = websocket_disconnect;
|
req->owner->disconnect = websocket_disconnect;
|
||||||
req->owner->rnb->flags &= ~NETBUF_CALL_CB_ALWAYS;
|
req->owner->rnb->flags &= ~NETBUF_CALL_CB_ALWAYS;
|
||||||
req->owner->proto = CONN_PROTO_WEBSOCKET;
|
|
||||||
|
|
||||||
req->owner->wscbs = wscbs;
|
req->owner->wscbs = wscbs;
|
||||||
req->owner->idle_timer.start = kore_time_ms();
|
req->owner->idle_timer.start = kore_time_ms();
|
||||||
|
|
Loading…
Reference in New Issue