| line |
true |
false |
branch |
|
37
|
2 |
3 |
while ((r = recv(websock_object->io.fd, buf, len, 0)) == -1 && errno == EINTR); |
|
|
0 |
2 |
while ((r = recv(websock_object->io.fd, buf, len, 0)) == -1 && errno == EINTR); |
|
38
|
2 |
3 |
if (r == -1) { |
|
39
|
0 |
2 |
if (errno == EAGAIN || errno == EWOULDBLOCK) { |
|
|
0 |
0 |
if (errno == EAGAIN || errno == EWOULDBLOCK) { |
|
44
|
0 |
3 |
} else if (r == 0) { /* Unexpected EOF is also treated as an error */ |
|
56
|
3 |
3 |
if(flags & WSLAY_MSG_MORE) { sflags |= MSG_MORE; } |
|
58
|
0 |
6 |
while ((r = send(websock_object->io.fd, buf, len, sflags)) == -1 && errno == EINTR); |
|
|
0 |
0 |
while ((r = send(websock_object->io.fd, buf, len, sflags)) == -1 && errno == EINTR); |
|
59
|
0 |
6 |
if (r == -1) { |
|
60
|
0 |
0 |
if(errno == EAGAIN || errno == EWOULDBLOCK) { |
|
|
0 |
0 |
if(errno == EAGAIN || errno == EWOULDBLOCK) { |
|
71
|
8 |
0 |
for (mg = SvMAGIC((SV*) hv); mg; mg = mg->mg_moremagic) { |
|
72
|
8 |
0 |
if (mg->mg_type == PERL_MAGIC_ext && mg->mg_virtual == NULL) { |
|
|
8 |
0 |
if (mg->mg_type == PERL_MAGIC_ext && mg->mg_virtual == NULL) { |
|
82
|
0 |
3 |
if (cb = hv_fetch(websock_object->perl_callbacks , "genmask", 7, 0)) { |
|
86
|
0 |
0 |
PUSHMARK(SP); |
|
87
|
0 |
0 |
XPUSHs(sv_2mortal(newSViv(len))); |
|
92
|
0 |
0 |
if (count != 1) { croak("Wslay - genmask callback returned bad value!\n"); } |
|
95
|
0 |
0 |
char *source_buf = SvPV(data, souce_len); |
|
96
|
0 |
0 |
if (souce_len) { memcpy(buf, source_buf, (souce_len < len ? souce_len : len)); } |
|
98
|
0 |
0 |
FREETMPS; |
|
103
|
12 |
3 |
for(; i < len; i++){ buf[i] = (char) rand(); } |
|
109
|
0 |
3 |
if (!(cb = hv_fetch(((websocket_object*) data)->perl_callbacks, "on_frame_recv_start", 19, 0)) ) { |
|
116
|
0 |
3 |
PUSHMARK(SP); |
|
117
|
0 |
3 |
EXTEND(SP, 4); |
|
124
|
3 |
0 |
FREETMPS; |
|
130
|
0 |
3 |
if (!(cb = hv_fetch(((websocket_object*) data)->perl_callbacks, "on_frame_recv_chunk", 19, 0))) { |
|
137
|
0 |
3 |
PUSHMARK(SP); |
|
138
|
0 |
3 |
EXTEND(SP, 1); |
|
142
|
3 |
0 |
FREETMPS; |
|
148
|
0 |
3 |
if (!(cb = hv_fetch(((websocket_object*) data)->perl_callbacks, "on_frame_recv_end", 17, 0))) { |
|
153
|
0 |
3 |
PUSHMARK(SP); |
|
158
|
0 |
2 |
if (msg->opcode == 0x08) { return; } // on_close callback is for close messages |
|
160
|
0 |
2 |
if (!(cb = hv_fetch(((websocket_object*) data)->perl_callbacks, "on_msg_recv", 11, 0))) { |
|
165
|
2 |
0 |
if (!(msg->rsv & WSLAY_RSV1_BIT) && msg->opcode == 1) { SvUTF8_on(msg_data); } |
|
|
1 |
1 |
if (!(msg->rsv & WSLAY_RSV1_BIT) && msg->opcode == 1) { SvUTF8_on(msg_data); } |
|
169
|
0 |
2 |
PUSHMARK(SP); |
|
170
|
0 |
2 |
EXTEND(SP, 4); |
|
177
|
1 |
0 |
FREETMPS; |
|
187
|
0 |
3 |
PUSHMARK(SP); |
|
188
|
0 |
3 |
XPUSHs(sv_2mortal(newSViv(len))); |
|
194
|
2 |
1 |
if (count == 1) { |
|
197
|
1 |
0 |
} else if (count == 2) { |
|
198
|
1 |
0 |
status = POPi; |
|
204
|
3 |
0 |
char* source_buf = SvPV(data, souce_len); |
|
205
|
2 |
1 |
if (souce_len) { |
|
210
|
3 |
0 |
FREETMPS; |
|
212
|
1 |
2 |
if (status == FRAGMENTED_EOF) { |
|
215
|
0 |
2 |
} else if (status == FRAGMENTED_ERROR) { |
|
232
|
2 |
0 |
if (cb = hv_fetch(websock_object->perl_callbacks, "on_close", 8, 0)) { |
|
236
|
0 |
2 |
PUSHMARK(SP); |
|
237
|
0 |
2 |
EXTEND(SP, 1); |
|
241
|
2 |
0 |
FREETMPS; |
|
248
|
3 |
3 |
if (revents & EV_READ) { |
|
249
|
0 |
2 |
if (wslay_event_recv(websock_object->ctx)) { |
|
254
|
3 |
2 |
if (revents & EV_WRITE) { |
|
255
|
0 |
3 |
if (wslay_event_send(websock_object->ctx)) { |
|
265
|
0 |
11 |
if (websock_object->read_stopped && websock_object->write_stopped) { return; } |
|
|
0 |
0 |
if (websock_object->read_stopped && websock_object->write_stopped) { return; } |
|
268
|
11 |
0 |
if (wslay_event_want_read(websock_object->ctx)) { |
|
269
|
11 |
0 |
if (!websock_object->read_stopped) { events |= EV_READ; } |
|
272
|
5 |
6 |
if (wslay_event_want_write(websock_object->ctx)) { |
|
273
|
3 |
2 |
if (!websock_object->write_stopped) { events |= EV_WRITE; } |
|
275
|
0 |
6 |
} else if ( |
|
276
|
0 |
0 |
websock_object->queue_wait_cb && |
|
280
|
0 |
0 |
PUSHMARK(SP); |
|
285
|
0 |
0 |
if (wslay_event_want_write(websock_object->ctx)) { |
|
286
|
0 |
0 |
if (!websock_object->write_stopped) { events |= EV_WRITE; } |
|
291
|
11 |
0 |
if (events) { |
|
294
|
0 |
0 |
} else if (!wanted_io) { |
|
306
|
0 |
1 |
I_EV_API("Net::WebSocket::EVx"); |
|
|
1 |
0 |
I_EV_API("Net::WebSocket::EVx"); |
|
|
1 |
0 |
I_EV_API("Net::WebSocket::EVx"); |
|
|
0 |
1 |
I_EV_API("Net::WebSocket::EVx"); |
|
330
|
2 |
0 |
websock_object->callbacks.on_frame_recv_start_callback = hv_exists(object, "on_frame_recv_start", strlen("on_frame_recv_start")) ? on_frame_recv_start_callback : NULL; |
|
331
|
2 |
0 |
websock_object->callbacks.on_frame_recv_chunk_callback = hv_exists(object, "on_frame_recv_chunk", strlen("on_frame_recv_chunk")) ? on_frame_recv_chunk_callback : NULL; |
|
332
|
2 |
0 |
websock_object->callbacks.on_frame_recv_end_callback = hv_exists(object, "on_frame_recv_end", strlen("on_frame_recv_end")) ? on_frame_recv_end_callback : NULL; |
|
333
|
2 |
0 |
websock_object->callbacks.on_msg_recv_callback = hv_exists(object, "on_msg_recv", strlen("on_msg_recv")) ? on_msg_recv_callback : NULL; |
|
334
|
1 |
1 |
if (is_server |
|
|
0 |
2 |
if (is_server |
|
419
|
0 |
0 |
if (websock_object->queue_wait_cb) { SvREFCNT_dec(websock_object->queue_wait_cb); } |
|
431
|
1 |
0 |
msg.msg = SvPV(data, len); |
|
435
|
0 |
1 |
if (result == WSLAY_ERR_INVALID_ARGUMENT) { croak("Wslay queue_msg - WSLAY_ERR_INVALID_ARGUMENT"); } |
|
436
|
0 |
1 |
if (result == WSLAY_ERR_NOMEM) { croak("Wslay queue_msg - WSLAY_ERR_NOMEM"); } |
|
451
|
0 |
0 |
msg.msg = SvPV(data, len); |
|
455
|
0 |
0 |
if (result == WSLAY_ERR_INVALID_ARGUMENT) { croak("Wslay queue_msg - WSLAY_ERR_INVALID_ARGUMENT"); } |
|
456
|
0 |
0 |
if (result == WSLAY_ERR_NOMEM) { croak("Wslay queue_msg - WSLAY_ERR_NOMEM"); } |
|
473
|
0 |
1 |
if (result == WSLAY_ERR_INVALID_ARGUMENT) { croak("Wslay queue_fragmented - WSLAY_ERR_INVALID_ARGUMENT"); } |
|
474
|
0 |
1 |
if (result == WSLAY_ERR_NOMEM) { croak("Wslay queue_fragmented - WSLAY_ERR_NOMEM"); } |
|
492
|
0 |
0 |
if (result == WSLAY_ERR_INVALID_ARGUMENT) { croak("Wslay queue_fragmented - WSLAY_ERR_INVALID_ARGUMENT"); } |
|
493
|
0 |
0 |
if (result == WSLAY_ERR_NOMEM) { croak("Wslay queue_fragmented - WSLAY_ERR_NOMEM"); } |
|
507
|
0 |
0 |
if (data) { reason = SvPV(data, reason_length); } |
|
|
0 |
0 |
if (data) { reason = SvPV(data, reason_length); } |
|
509
|
0 |
0 |
if (result == WSLAY_ERR_INVALID_ARGUMENT) {croak("Wslay send - WSLAY_ERR_INVALID_ARGUMENT"); } |
|
510
|
0 |
0 |
if (result == WSLAY_ERR_NOMEM) { croak("Wslay send - WSLAY_ERR_NOMEM"); } |
|
529
|
0 |
2 |
if (websock_object->queue_wait_cb) { SvREFCNT_dec(websock_object->queue_wait_cb); } |
|
530
|
2 |
0 |
if (websock_object->ctx) { close_connection(websock_object); } |