From c484ee49981107951f117f89defeb343fbc4b347 Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Wed, 2 Nov 2016 21:53:31 +0100 Subject: [PATCH] Added comments --- core/net/ipv6/websocket-http-client.c | 13 ++++++++++++- core/net/ipv6/websocket.c | 9 ++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/net/ipv6/websocket-http-client.c b/core/net/ipv6/websocket-http-client.c index 95ed74961..7d4164a04 100644 --- a/core/net/ipv6/websocket-http-client.c +++ b/core/net/ipv6/websocket-http-client.c @@ -62,6 +62,13 @@ send_get(struct websocket_http_client_state *s) if(strlen(s->header) > 0) { tcp_socket_send_str(tcps, s->header); } + /* The Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== header is + supposed to be a random value, encoded as base64, that is SHA1 + hashed by the server and returned in a HTTP header. This is used + to make sure that we are not seeing some cached version of this + conversation. But we have no SHA1 code by default in Contiki, so + we can't check the return value. Therefore we just use a + hardcoded value here. */ tcp_socket_send_str(tcps, "Connection: Upgrade\r\n" "Upgrade: websocket\r\n" @@ -112,6 +119,8 @@ event(struct tcp_socket *tcps, void *ptr, } else if(e == TCP_SOCKET_ABORTED) { websocket_http_client_aborted(s); } else if(e == TCP_SOCKET_DATA_SENT) { + /* We could feed this information up to the websocket.c layer, but + we currently do not do that. */ } } /*---------------------------------------------------------------------------*/ @@ -131,7 +140,9 @@ parse_header_byte(struct websocket_http_client_state *s, /* Skip the space that follow the first part */ PT_YIELD(&s->parse_header_pt); - /* Read the first three bytes that consistute the HTTP status code. */ + /* Read the first three bytes that constistute the HTTP status + code. We store the HTTP status code as an integer in the + s->http_status field. */ s->http_status = (b - '0'); PT_YIELD(&s->parse_header_pt); s->http_status = s->http_status * 10 + (b - '0'); diff --git a/core/net/ipv6/websocket.c b/core/net/ipv6/websocket.c index cf37687e7..67455eeb4 100644 --- a/core/net/ipv6/websocket.c +++ b/core/net/ipv6/websocket.c @@ -603,7 +603,10 @@ static int send_data(struct websocket *s, const void *data, uint16_t datalen, uint8_t data_type_opcode) { - uint8_t buf[WEBSOCKET_MAX_MSGLEN + 4 + 4]; + uint8_t buf[WEBSOCKET_MAX_MSGLEN + 4 + 4]; /* The extra + 4 + 4 here + comes from the size of + the websocket framing + header. */ struct websocket_frame_hdr *hdr; struct websocket_frame_mask *mask; @@ -616,6 +619,8 @@ send_data(struct websocket *s, const void *data, return -1; } + /* We need to have 4 + 4 additional bytes for the websocket framing + header. */ if(4 + 4 + datalen > websocket_http_client_sendbuflen(&s->s)) { PRINTF("websocket: too few bytes left (%d left, %d needed)\n", websocket_http_client_sendbuflen(&s->s), @@ -689,6 +694,8 @@ websocket_ping(struct websocket *s) struct websocket_frame_hdr *hdr; struct websocket_frame_mask *mask; + /* We need 2 + 4 additional bytes for the websocket framing + header. */ if(2 + 4 > websocket_http_client_sendbuflen(&s->s)) { return -1; }