| line |
true |
false |
branch |
|
72
|
6 |
0 |
for (i = 0; i < ps->data_providers_count; i++) { |
|
73
|
6 |
0 |
if (ps->data_providers[i] && ps->data_providers[i]->stream_id == stream_id) { |
|
|
6 |
0 |
if (ps->data_providers[i] && ps->data_providers[i]->stream_id == stream_id) { |
|
83
|
0 |
8 |
for (i = 0; i < ps->data_providers_count; i++) { |
|
84
|
0 |
0 |
if (!ps->data_providers[i]) { |
|
90
|
8 |
0 |
if (ps->data_providers_count >= ps->data_providers_cap) { |
|
91
|
0 |
8 |
int new_cap = ps->data_providers_cap ? ps->data_providers_cap * 2 : 8; |
|
104
|
2 |
10 |
for (i = 0; i < ps->data_providers_count; i++) { |
|
105
|
2 |
0 |
if (ps->data_providers[i] && ps->data_providers[i]->stream_id == stream_id) { |
|
|
2 |
0 |
if (ps->data_providers[i] && ps->data_providers[i]->stream_id == stream_id) { |
|
107
|
1 |
1 |
if (dp->callback) SvREFCNT_dec(dp->callback); |
|
108
|
0 |
2 |
if (dp->user_data) SvREFCNT_dec(dp->user_data); |
|
133
|
0 |
16 |
if (!dp) { |
|
139
|
7 |
9 |
if (!dp->callback && dp->user_data && SvOK(dp->user_data)) { |
|
|
6 |
1 |
if (!dp->callback && dp->user_data && SvOK(dp->user_data)) { |
|
|
6 |
0 |
if (!dp->callback && dp->user_data && SvOK(dp->user_data)) { |
|
144
|
6 |
0 |
if (send_len > 0) { |
|
148
|
6 |
0 |
if (send_len >= full_len) { |
|
152
|
5 |
1 |
if (dp->eof) { |
|
166
|
9 |
1 |
if (!dp->callback || !SvOK(dp->callback)) { |
|
|
0 |
9 |
if (!dp->callback || !SvOK(dp->callback)) { |
|
167
|
0 |
1 |
if (dp->eof) { |
|
178
|
0 |
9 |
PUSHMARK(SP); |
|
182
|
0 |
9 |
XPUSHs(sv_2mortal(newSViv(stream_id))); |
|
183
|
0 |
9 |
XPUSHs(sv_2mortal(newSVuv(length))); |
|
184
|
0 |
9 |
if (dp->user_data && SvOK(dp->user_data)) { |
|
|
0 |
0 |
if (dp->user_data && SvOK(dp->user_data)) { |
|
185
|
0 |
0 |
XPUSHs(dp->user_data); |
|
192
|
9 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
0 |
9 |
if (SvTRUE(ERRSV)) { |
|
194
|
0 |
0 |
warn("nghttp2 data provider callback error: %s", SvPV_nolen(ERRSV)); |
|
196
|
0 |
9 |
} else if (count == 0) { |
|
200
|
9 |
0 |
} else if (count >= 1) { |
|
204
|
3 |
6 |
if (count >= 2) { |
|
209
|
6 |
3 |
if (!SvOK(data_sv)) { |
|
218
|
0 |
3 |
if (data_len > length) { |
|
221
|
3 |
0 |
if (data_len > 0) { |
|
227
|
3 |
0 |
if (eof_sv && SvTRUE(eof_sv)) { |
|
|
2 |
1 |
if (eof_sv && SvTRUE(eof_sv)) { |
|
232
|
0 |
3 |
if (data_len == 0 && !dp->eof) { |
|
|
0 |
0 |
if (data_len == 0 && !dp->eof) { |
|
240
|
9 |
0 |
FREETMPS; |
|
252
|
577 |
0 |
if (!callback || !SvOK(callback)) { |
|
|
0 |
577 |
if (!callback || !SvOK(callback)) { |
|
258
|
0 |
577 |
PUSHMARK(SP); |
|
260
|
577 |
0 |
if (args) { |
|
263
|
1556 |
577 |
for (i = 0; i < len; i++) { |
|
265
|
1556 |
0 |
if (elem) { |
|
266
|
0 |
1556 |
XPUSHs(*elem); |
|
275
|
577 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
0 |
577 |
if (SvTRUE(ERRSV)) { |
|
277
|
0 |
0 |
warn("nghttp2 callback error: %s", SvPV_nolen(ERRSV)); |
|
279
|
577 |
0 |
} else if (count > 0) { |
|
281
|
577 |
0 |
if (SvIOK(result)) { |
|
287
|
577 |
0 |
FREETMPS; |
|
300
|
0 |
261 |
if (ps->send_buf_len + length > ps->send_buf_cap) { |
|
302
|
0 |
0 |
if (new_cap < ps->send_buf_len + length) { |
|
306
|
0 |
0 |
if (!ps->send_buf) { |
|
327
|
69 |
0 |
if (!ps->cb_on_begin_headers || !SvOK(ps->cb_on_begin_headers)) { |
|
|
0 |
69 |
if (!ps->cb_on_begin_headers || !SvOK(ps->cb_on_begin_headers)) { |
|
353
|
261 |
0 |
if (!ps->cb_on_header || !SvOK(ps->cb_on_header)) { |
|
|
0 |
261 |
if (!ps->cb_on_header || !SvOK(ps->cb_on_header)) { |
|
379
|
214 |
0 |
if (!ps->cb_on_frame_recv || !SvOK(ps->cb_on_frame_recv)) { |
|
|
0 |
214 |
if (!ps->cb_on_frame_recv || !SvOK(ps->cb_on_frame_recv)) { |
|
409
|
25 |
0 |
if (!ps->cb_on_data_chunk_recv || !SvOK(ps->cb_on_data_chunk_recv)) { |
|
|
0 |
25 |
if (!ps->cb_on_data_chunk_recv || !SvOK(ps->cb_on_data_chunk_recv)) { |
|
437
|
8 |
4 |
if (!ps->cb_on_stream_close || !SvOK(ps->cb_on_stream_close)) { |
|
|
0 |
8 |
if (!ps->cb_on_stream_close || !SvOK(ps->cb_on_stream_close)) { |
|
460
|
0 |
14 |
RETVAL = info ? 1 : 0; |
|
469
|
2 |
0 |
RETVAL = info ? info->version_str : "unknown"; |
|
478
|
2 |
0 |
RETVAL = info ? info->version_num : 0; |
|
|
0 |
2 |
RETVAL = info ? info->version_num : 0; |
|
486
|
0 |
0 |
RETVAL = NGHTTP2_ERR_WOULDBLOCK; |
|
493
|
0 |
0 |
RETVAL = NGHTTP2_ERR_CALLBACK_FAILURE; |
|
500
|
0 |
0 |
RETVAL = NGHTTP2_ERR_DEFERRED; |
|
507
|
0 |
2 |
RETVAL = NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; |
|
514
|
0 |
0 |
RETVAL = NGHTTP2_FLAG_NONE; |
|
521
|
0 |
1 |
RETVAL = NGHTTP2_FLAG_END_STREAM; |
|
528
|
0 |
0 |
RETVAL = NGHTTP2_FLAG_END_HEADERS; |
|
535
|
0 |
0 |
RETVAL = NGHTTP2_FLAG_ACK; |
|
542
|
0 |
0 |
RETVAL = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS; |
|
549
|
0 |
0 |
RETVAL = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE; |
|
556
|
0 |
0 |
RETVAL = NGHTTP2_SETTINGS_MAX_FRAME_SIZE; |
|
563
|
0 |
0 |
RETVAL = NGHTTP2_SETTINGS_ENABLE_PUSH; |
|
570
|
0 |
1 |
RETVAL = NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL; |
|
577
|
0 |
0 |
RETVAL = NGHTTP2_DATA_FLAG_NONE; |
|
584
|
0 |
0 |
RETVAL = NGHTTP2_DATA_FLAG_EOF; |
|
591
|
0 |
0 |
RETVAL = NGHTTP2_DATA_FLAG_NO_END_STREAM; |
|
598
|
0 |
0 |
RETVAL = NGHTTP2_DATA_FLAG_NO_COPY; |
|
606
|
0 |
0 |
RETVAL = NGHTTP2_DATA; |
|
613
|
0 |
0 |
RETVAL = NGHTTP2_HEADERS; |
|
620
|
0 |
0 |
RETVAL = NGHTTP2_SETTINGS; |
|
627
|
0 |
0 |
RETVAL = NGHTTP2_PUSH_PROMISE; |
|
634
|
0 |
0 |
RETVAL = NGHTTP2_GOAWAY; |
|
656
|
1 |
97 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
|
1 |
0 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
|
1 |
0 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
669
|
0 |
98 |
if (SvOK(user_data)) { |
|
674
|
98 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_begin_headers", 16, 0))) { |
|
677
|
98 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_header", 9, 0))) { |
|
680
|
98 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_frame_recv", 13, 0))) { |
|
683
|
21 |
77 |
if ((svp = hv_fetch(callbacks_hv, "on_data_chunk_recv", 18, 0))) { |
|
686
|
14 |
84 |
if ((svp = hv_fetch(callbacks_hv, "on_stream_close", 15, 0))) { |
|
700
|
1 |
97 |
if (options_hv) { |
|
702
|
0 |
1 |
if (rv != 0) { |
|
704
|
0 |
0 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
705
|
0 |
0 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
706
|
0 |
0 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
707
|
0 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
708
|
0 |
0 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
709
|
0 |
0 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
715
|
1 |
0 |
if ((svp = hv_fetch(options_hv, "max_send_header_block_length", 28, 0))) { |
|
726
|
0 |
98 |
if (rv != 0) { |
|
727
|
0 |
0 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
728
|
0 |
0 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
729
|
0 |
0 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
730
|
0 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
731
|
0 |
0 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
732
|
0 |
0 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
753
|
120 |
0 |
if (ps) { |
|
755
|
120 |
0 |
if (ps->session) { |
|
758
|
0 |
120 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
759
|
111 |
9 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
760
|
112 |
8 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
761
|
120 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
762
|
30 |
90 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
763
|
23 |
97 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
764
|
120 |
0 |
if (ps->send_buf) free(ps->send_buf); |
|
766
|
8 |
120 |
for (i = 0; i < ps->data_providers_count; i++) { |
|
767
|
6 |
2 |
if (ps->data_providers[i]) { |
|
769
|
2 |
4 |
if (dp->callback) SvREFCNT_dec(dp->callback); |
|
770
|
0 |
6 |
if (dp->user_data) SvREFCNT_dec(dp->user_data); |
|
774
|
8 |
112 |
if (ps->data_providers) free(ps->data_providers); |
|
793
|
1 |
182 |
if (rv < 0) { |
|
796
|
52 |
130 |
RETVAL = (int)rv; |
|
815
|
0 |
284 |
if (rv != 0) { |
|
820
|
219 |
65 |
if (ps->send_buf_len > 0) { |
|
860
|
123 |
0 |
int niv = 0; |
|
866
|
111 |
12 |
if ((svp = hv_fetch(settings_hv, "max_concurrent_streams", 22, 0))) { |
|
871
|
109 |
14 |
if ((svp = hv_fetch(settings_hv, "initial_window_size", 19, 0))) { |
|
876
|
0 |
123 |
if ((svp = hv_fetch(settings_hv, "max_frame_size", 14, 0))) { |
|
881
|
0 |
123 |
if ((svp = hv_fetch(settings_hv, "enable_push", 11, 0))) { |
|
886
|
10 |
113 |
if ((svp = hv_fetch(settings_hv, "enable_connect_protocol", 23, 0))) { |
|
891
|
1 |
122 |
if ((svp = hv_fetch(settings_hv, "header_table_size", 17, 0))) { |
|
896
|
1 |
122 |
if ((svp = hv_fetch(settings_hv, "max_header_list_size", 20, 0))) { |
|
903
|
0 |
123 |
if (rv != 0) { |
|
906
|
109 |
14 |
RETVAL = rv; |
|
931
|
0 |
0 |
Newxz(nva, nvlen, nghttp2_nv); |
|
933
|
0 |
0 |
for (i = 0; i < (I32)nvlen; i++) { |
|
935
|
0 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
0 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
0 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
940
|
0 |
0 |
if (name_sv && value_sv) { |
|
|
0 |
0 |
if (name_sv && value_sv) { |
|
959
|
0 |
0 |
if (rv != 0) { |
|
962
|
0 |
0 |
RETVAL = rv; |
|
983
|
0 |
0 |
Newxz(nva, nvlen, nghttp2_nv); |
|
985
|
0 |
0 |
for (i = 0; i < (I32)nvlen; i++) { |
|
987
|
0 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
0 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
0 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
992
|
0 |
0 |
if (name_sv && value_sv) { |
|
|
0 |
0 |
if (name_sv && value_sv) { |
|
1007
|
0 |
0 |
if (rv != 0) { |
|
1010
|
0 |
0 |
RETVAL = rv; |
|
1025
|
0 |
2 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
|
0 |
0 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
1028
|
1 |
1 |
RETVAL = rv; |
|
1043
|
0 |
0 |
if (data) { |
|
1064
|
0 |
0 |
SvOK(data) ? newSVsv(data) : NULL); |
|
1065
|
0 |
0 |
RETVAL = rv; |
|
1080
|
0 |
1 |
RETVAL = rv; |
|
1107
|
0 |
2 |
Newxz(nva, nvlen, nghttp2_nv); |
|
1109
|
4 |
2 |
for (i = 0; i < (I32)nvlen; i++) { |
|
1111
|
4 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
4 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
4 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
1116
|
4 |
0 |
if (name_sv && value_sv) { |
|
|
4 |
0 |
if (name_sv && value_sv) { |
|
1131
|
0 |
2 |
if (SvOK(cb_user_data)) { |
|
1148
|
0 |
2 |
if (rv != 0) { |
|
1152
|
0 |
2 |
RETVAL = rv; |
|
1176
|
0 |
4 |
if (!dp) { |
|
1184
|
3 |
1 |
if (dp->callback) { |
|
1188
|
0 |
4 |
if (dp->user_data) { |
|
1191
|
4 |
0 |
dp->user_data = SvOK(data_sv) ? newSVsv(data_sv) : NULL; |
|
1197
|
0 |
4 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
|
0 |
0 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
1200
|
0 |
4 |
RETVAL = 0; |
|
1215
|
0 |
0 |
RETVAL = dp ? dp->deferred : 0; |
|
|
0 |
0 |
RETVAL = dp ? dp->deferred : 0; |
|
1230
|
2 |
0 |
if (dp) { |
|
1255
|
0 |
22 |
if (SvOK(user_data)) { |
|
1260
|
22 |
0 |
if (callbacks_hv) { |
|
1261
|
13 |
9 |
if ((svp = hv_fetch(callbacks_hv, "on_begin_headers", 16, 0))) { |
|
1264
|
14 |
8 |
if ((svp = hv_fetch(callbacks_hv, "on_header", 9, 0))) { |
|
1267
|
22 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_frame_recv", 13, 0))) { |
|
1270
|
9 |
13 |
if ((svp = hv_fetch(callbacks_hv, "on_data_chunk_recv", 18, 0))) { |
|
1273
|
9 |
13 |
if ((svp = hv_fetch(callbacks_hv, "on_stream_close", 15, 0))) { |
|
1291
|
0 |
22 |
if (rv != 0) { |
|
1292
|
0 |
0 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
1293
|
0 |
0 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
1294
|
0 |
0 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
1295
|
0 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
1296
|
0 |
0 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
1297
|
0 |
0 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
1326
|
24 |
0 |
STRLEN body_len = 0; |
|
1332
|
0 |
24 |
Newxz(nva, nvlen, nghttp2_nv); |
|
1334
|
155 |
24 |
for (i = 0; i < (I32)nvlen; i++) { |
|
1336
|
155 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
155 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
|
155 |
0 |
if (pair && SvROK(*pair) && SvTYPE(SvRV(*pair)) == SVt_PVAV) { |
|
1341
|
155 |
0 |
if (name_sv && value_sv) { |
|
|
155 |
0 |
if (name_sv && value_sv) { |
|
1353
|
6 |
18 |
if (SvOK(body_sv) && SvROK(body_sv) && SvTYPE(SvRV(body_sv)) == SVt_PVCV) { |
|
|
4 |
2 |
if (SvOK(body_sv) && SvROK(body_sv) && SvTYPE(SvRV(body_sv)) == SVt_PVCV) { |
|
|
4 |
0 |
if (SvOK(body_sv) && SvROK(body_sv) && SvTYPE(SvRV(body_sv)) == SVt_PVCV) { |
|
1365
|
2 |
18 |
else if (SvOK(body_sv) && SvPOK(body_sv)) { |
|
|
2 |
0 |
else if (SvOK(body_sv) && SvPOK(body_sv)) { |
|
1367
|
2 |
0 |
if (body_len > 0) { |
|
1386
|
0 |
24 |
if (stream_id < 0) { |
|
1387
|
0 |
0 |
if (dp) { |
|
1388
|
0 |
0 |
if (dp->callback) SvREFCNT_dec(dp->callback); |
|
1389
|
0 |
0 |
if (dp->user_data) SvREFCNT_dec(dp->user_data); |
|
1396
|
6 |
18 |
if (dp) { |
|
1401
|
20 |
4 |
RETVAL = stream_id; |
|
1417
|
0 |
0 |
if (rv != 0) { |
|
1420
|
0 |
0 |
RETVAL = rv; |
|
1440
|
0 |
0 |
if (SvOK(opaque_data)) { |
|
1442
|
0 |
0 |
if (len != 8) { |
|
1450
|
0 |
0 |
if (rv != 0) { |
|
1453
|
0 |
0 |
RETVAL = rv; |
|
1469
|
0 |
0 |
if (rv != 0) { |
|
1472
|
0 |
0 |
RETVAL = rv; |