|
|
|
@ -946,9 +946,8 @@ static int send_ietf_00(handler_ctx *hctx, mod_wstunnel_frame_type_t type, const
|
|
|
|
|
DEBUG_LOG(MOD_WEBSOCKET_LOG_ERR, "s", "invalid frame type"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
http_chunk_append_mem(srv, con, "", 1); /* needs '\0' to send */ |
|
|
|
|
DEBUG_LOG(MOD_WEBSOCKET_LOG_DEBUG, "sdsx", |
|
|
|
|
"send data to client ( fd =", con->fd, "), frame size =", len+1); |
|
|
|
|
"send data to client ( fd =", con->fd, "), frame size =", len); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1017,12 +1016,11 @@ static int recv_ietf_00(handler_ctx *hctx) {
|
|
|
|
|
&& !buffer_is_empty(payload)) { |
|
|
|
|
size_t len; |
|
|
|
|
hctx->frame.ctl.siz = 0; |
|
|
|
|
len = buffer_string_length(payload)+1; |
|
|
|
|
len = buffer_string_length(payload); |
|
|
|
|
chunkqueue_get_memory(hctx->gw.wb, &mem, &len, len, 0); |
|
|
|
|
len = buffer_string_length(payload)+1; |
|
|
|
|
len = buffer_string_length(payload); |
|
|
|
|
memcpy(mem, payload->ptr, len); |
|
|
|
|
mem[len] = '\0'; /* needs '\0' char to send */ |
|
|
|
|
chunkqueue_use_memory(hctx->gw.wb, len+1); |
|
|
|
|
chunkqueue_use_memory(hctx->gw.wb, len); |
|
|
|
|
buffer_reset(payload); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
@ -1041,8 +1039,6 @@ static int recv_ietf_00(handler_ctx *hctx) {
|
|
|
|
|
"fail to base64-decode"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
/* needs '\0' char to send */ |
|
|
|
|
buffer_append_string_len(b, CONST_STR_LEN("")); |
|
|
|
|
buffer_reset(payload); |
|
|
|
|
/*chunkqueue_use_memory()*/ |
|
|
|
|
hctx->gw.wb->bytes_in += buffer_string_length(b)-len; |
|
|
|
@ -1055,7 +1051,9 @@ static int recv_ietf_00(handler_ctx *hctx) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
chunkqueue_reset(cq); |
|
|
|
|
/* XXX: should add ability to handle and preserve partial frames above */ |
|
|
|
|
/*(not chunkqueue_reset(); do not reset cq->bytes_in, cq->bytes_out)*/ |
|
|
|
|
chunkqueue_mark_written(cq, chunkqueue_length(cq)); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1138,9 +1136,8 @@ static int send_rfc_6455(handler_ctx *hctx, mod_wstunnel_frame_type_t type, cons
|
|
|
|
|
} |
|
|
|
|
http_chunk_append_mem(srv, con, mem, len); |
|
|
|
|
if (siz) http_chunk_append_mem(srv, con, payload, siz); |
|
|
|
|
http_chunk_append_mem(srv, con, "", 1); /* needs '\0' to send */ |
|
|
|
|
DEBUG_LOG(MOD_WEBSOCKET_LOG_DEBUG, "sdsx", |
|
|
|
|
"send data to client ( fd =",con->fd,"), frame size =",len+siz+1); |
|
|
|
|
"send data to client ( fd =",con->fd,"), frame size =",len+siz); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1305,12 +1302,11 @@ static int recv_rfc_6455(handler_ctx *hctx) {
|
|
|
|
|
char *mem; |
|
|
|
|
size_t len; |
|
|
|
|
unmask_payload(hctx); |
|
|
|
|
len = buffer_string_length(payload)+1; |
|
|
|
|
len = buffer_string_length(payload); |
|
|
|
|
chunkqueue_get_memory(hctx->gw.wb, &mem, &len, len, 0); |
|
|
|
|
len = buffer_string_length(payload)+1; |
|
|
|
|
len = buffer_string_length(payload); |
|
|
|
|
memcpy(mem, payload->ptr, len); |
|
|
|
|
mem[len] = '\0'; /* needs '\0' char to send */ |
|
|
|
|
chunkqueue_use_memory(hctx->gw.wb, len+1); |
|
|
|
|
chunkqueue_use_memory(hctx->gw.wb, len); |
|
|
|
|
buffer_reset(payload); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -1319,7 +1315,7 @@ static int recv_rfc_6455(handler_ctx *hctx) {
|
|
|
|
|
unmask_payload(hctx); |
|
|
|
|
mod_wstunnel_frame_send(hctx, |
|
|
|
|
MOD_WEBSOCKET_FRAME_TYPE_PONG, |
|
|
|
|
payload->ptr, buffer_string_length(payload)+1); |
|
|
|
|
payload->ptr, buffer_string_length(payload)); |
|
|
|
|
buffer_reset(payload); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
@ -1339,7 +1335,9 @@ static int recv_rfc_6455(handler_ctx *hctx) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
chunkqueue_reset(cq); |
|
|
|
|
/* XXX: should add ability to handle and preserve partial frames above */ |
|
|
|
|
/*(not chunkqueue_reset(); do not reset cq->bytes_in, cq->bytes_out)*/ |
|
|
|
|
chunkqueue_mark_written(cq, chunkqueue_length(cq)); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|