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); } |