Skip to content

Commit cce7dba

Browse files
committed
Parse payload length in streaming manner
1 parent b5bbf25 commit cce7dba

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

src/ngx_http_websocket_stat_frame_counter.c

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -73,23 +73,16 @@ frame_counter_process_message(u_char **buffer, ssize_t *size,
7373
break;
7474
case PAYLOAD_LEN_LARGE:
7575
case PAYLOAD_LEN_HUGE: {
76-
int i;
77-
if (frame_counter->stage == PAYLOAD_LEN_LARGE) {
78-
assert(*size >= 2);
79-
i = 2;
80-
} else {
81-
assert(*size >= 8);
82-
i = 8;
76+
frame_counter->bytes_consumed++;
77+
frame_counter->current_payload_size <<= 8;
78+
frame_counter->current_payload_size |= **buffer;
79+
if ((frame_counter->stage == PAYLOAD_LEN_LARGE && frame_counter->bytes_consumed == 2) ||
80+
(frame_counter->stage == PAYLOAD_LEN_HUGE && frame_counter->bytes_consumed == 8)) {
81+
frame_counter->current_message_size += frame_counter->current_payload_size;
82+
frame_counter->stage = frame_counter->payload_masked ? MASK : PAYLOAD;
83+
frame_counter->bytes_consumed = 0;
8384
}
84-
do {
85-
frame_counter->current_payload_size <<= 8;
86-
frame_counter->current_payload_size |= **buffer;
87-
move_buffer(buffer, size, 1);
88-
} while (--i);
89-
frame_counter->current_message_size += frame_counter->current_payload_size;
90-
frame_counter->stage =
91-
frame_counter->payload_masked ? MASK : PAYLOAD;
92-
frame_counter->bytes_consumed = 0;
85+
move_buffer(buffer, size, 1);
9386
break;
9487
}
9588
case MASK:

0 commit comments

Comments
 (0)