Skip to content

Commit

Permalink
Websocket : handle close frame
Browse files Browse the repository at this point in the history
  • Loading branch information
paraboul committed Mar 11, 2011
1 parent 8f2b13f commit 35e198b
Showing 1 changed file with 25 additions and 5 deletions.
30 changes: 25 additions & 5 deletions src/http.c
Expand Up @@ -179,11 +179,31 @@ static void process_websocket_frame(ape_socket *co, acetables *g_ape)
websocket->frame_payload.extended_length = 0;
websocket->data_pos = 0;

saved = buffer->data[websocket->offset+1];
buffer->data[websocket->offset+1] = '\0';

parser->onready(parser, g_ape);
buffer->data[websocket->offset+1] = saved;
switch(websocket->frame_payload.start & 0x0F) {
case 0x01:
{
/*
Close frame
Reply by a close response
*/
char payload_head[2] = { 0x81, 0x00 };
sendbin(co->fd, payload_head, 2, 0, g_ape);
return;
}
case 0x02:

break;
case 0x03: /* Never called as long as we never ask for pong */
break;
default:
/* Data frame */
saved = buffer->data[websocket->offset+1];
buffer->data[websocket->offset+1] = '\0';

parser->onready(parser, g_ape);
buffer->data[websocket->offset+1] = saved;
break;
}

if (websocket->offset+1 == buffer->length) {
websocket->offset = 0;
Expand Down

0 comments on commit 35e198b

Please sign in to comment.