| 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 |
16 |
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 |
267 |
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 |
10 |
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 |
15 |
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
|
2 |
97 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
|
2 |
0 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
|
2 |
0 |
if (items > 3 && SvROK(ST(3)) && SvTYPE(SvRV(ST(3))) == SVt_PVHV) { |
|
669
|
0 |
99 |
if (SvOK(user_data)) { |
|
674
|
99 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_begin_headers", 16, 0))) { |
|
677
|
99 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_header", 9, 0))) { |
|
680
|
99 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_frame_recv", 13, 0))) { |
|
683
|
21 |
78 |
if ((svp = hv_fetch(callbacks_hv, "on_data_chunk_recv", 18, 0))) { |
|
686
|
14 |
85 |
if ((svp = hv_fetch(callbacks_hv, "on_stream_close", 15, 0))) { |
|
700
|
2 |
97 |
if (options_hv) { |
|
702
|
0 |
2 |
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 |
1 |
if ((svp = hv_fetch(options_hv, "max_send_header_block_length", 28, 0))) { |
|
719
|
1 |
1 |
if ((svp = hv_fetch(options_hv, "stream_reset_burst", 18, 0))) { |
|
721
|
1 |
0 |
if (rate_svp) { |
|
734
|
0 |
99 |
if (rv != 0) { |
|
735
|
0 |
0 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
736
|
0 |
0 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
737
|
0 |
0 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
738
|
0 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
739
|
0 |
0 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
740
|
0 |
0 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
761
|
121 |
0 |
if (ps) { |
|
763
|
121 |
0 |
if (ps->session) { |
|
766
|
0 |
121 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
767
|
112 |
9 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
768
|
113 |
8 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
769
|
121 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
770
|
30 |
91 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
771
|
23 |
98 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
772
|
121 |
0 |
if (ps->send_buf) free(ps->send_buf); |
|
774
|
8 |
121 |
for (i = 0; i < ps->data_providers_count; i++) { |
|
775
|
6 |
2 |
if (ps->data_providers[i]) { |
|
777
|
2 |
4 |
if (dp->callback) SvREFCNT_dec(dp->callback); |
|
778
|
0 |
6 |
if (dp->user_data) SvREFCNT_dec(dp->user_data); |
|
782
|
8 |
113 |
if (ps->data_providers) free(ps->data_providers); |
|
801
|
1 |
182 |
if (rv < 0) { |
|
804
|
52 |
130 |
RETVAL = (int)rv; |
|
823
|
0 |
284 |
if (rv != 0) { |
|
828
|
219 |
65 |
if (ps->send_buf_len > 0) { |
|
868
|
123 |
0 |
int niv = 0; |
|
874
|
111 |
12 |
if ((svp = hv_fetch(settings_hv, "max_concurrent_streams", 22, 0))) { |
|
879
|
109 |
14 |
if ((svp = hv_fetch(settings_hv, "initial_window_size", 19, 0))) { |
|
884
|
0 |
123 |
if ((svp = hv_fetch(settings_hv, "max_frame_size", 14, 0))) { |
|
889
|
0 |
123 |
if ((svp = hv_fetch(settings_hv, "enable_push", 11, 0))) { |
|
894
|
10 |
113 |
if ((svp = hv_fetch(settings_hv, "enable_connect_protocol", 23, 0))) { |
|
899
|
1 |
122 |
if ((svp = hv_fetch(settings_hv, "header_table_size", 17, 0))) { |
|
904
|
1 |
122 |
if ((svp = hv_fetch(settings_hv, "max_header_list_size", 20, 0))) { |
|
911
|
0 |
123 |
if (rv != 0) { |
|
914
|
109 |
14 |
RETVAL = rv; |
|
939
|
0 |
0 |
Newxz(nva, nvlen, nghttp2_nv); |
|
941
|
0 |
0 |
for (i = 0; i < (I32)nvlen; i++) { |
|
943
|
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) { |
|
948
|
0 |
0 |
if (name_sv && value_sv) { |
|
|
0 |
0 |
if (name_sv && value_sv) { |
|
967
|
0 |
0 |
if (rv != 0) { |
|
970
|
0 |
0 |
RETVAL = rv; |
|
991
|
0 |
0 |
Newxz(nva, nvlen, nghttp2_nv); |
|
993
|
0 |
0 |
for (i = 0; i < (I32)nvlen; i++) { |
|
995
|
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) { |
|
1000
|
0 |
0 |
if (name_sv && value_sv) { |
|
|
0 |
0 |
if (name_sv && value_sv) { |
|
1015
|
0 |
0 |
if (rv != 0) { |
|
1018
|
0 |
0 |
RETVAL = rv; |
|
1033
|
0 |
2 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
|
0 |
0 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
1036
|
1 |
1 |
RETVAL = rv; |
|
1051
|
0 |
0 |
if (data) { |
|
1072
|
0 |
0 |
SvOK(data) ? newSVsv(data) : NULL); |
|
1073
|
0 |
0 |
RETVAL = rv; |
|
1088
|
0 |
1 |
RETVAL = rv; |
|
1115
|
0 |
2 |
Newxz(nva, nvlen, nghttp2_nv); |
|
1117
|
4 |
2 |
for (i = 0; i < (I32)nvlen; i++) { |
|
1119
|
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) { |
|
1124
|
4 |
0 |
if (name_sv && value_sv) { |
|
|
4 |
0 |
if (name_sv && value_sv) { |
|
1139
|
0 |
2 |
if (SvOK(cb_user_data)) { |
|
1156
|
0 |
2 |
if (rv != 0) { |
|
1160
|
0 |
2 |
RETVAL = rv; |
|
1184
|
0 |
4 |
if (!dp) { |
|
1192
|
3 |
1 |
if (dp->callback) { |
|
1196
|
0 |
4 |
if (dp->user_data) { |
|
1199
|
4 |
0 |
dp->user_data = SvOK(data_sv) ? newSVsv(data_sv) : NULL; |
|
1205
|
0 |
4 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
|
0 |
0 |
if (rv != 0 && rv != NGHTTP2_ERR_INVALID_ARGUMENT) { |
|
1208
|
0 |
4 |
RETVAL = 0; |
|
1223
|
0 |
0 |
RETVAL = dp ? dp->deferred : 0; |
|
|
0 |
0 |
RETVAL = dp ? dp->deferred : 0; |
|
1238
|
2 |
0 |
if (dp) { |
|
1263
|
0 |
22 |
if (SvOK(user_data)) { |
|
1268
|
22 |
0 |
if (callbacks_hv) { |
|
1269
|
13 |
9 |
if ((svp = hv_fetch(callbacks_hv, "on_begin_headers", 16, 0))) { |
|
1272
|
14 |
8 |
if ((svp = hv_fetch(callbacks_hv, "on_header", 9, 0))) { |
|
1275
|
22 |
0 |
if ((svp = hv_fetch(callbacks_hv, "on_frame_recv", 13, 0))) { |
|
1278
|
9 |
13 |
if ((svp = hv_fetch(callbacks_hv, "on_data_chunk_recv", 18, 0))) { |
|
1281
|
9 |
13 |
if ((svp = hv_fetch(callbacks_hv, "on_stream_close", 15, 0))) { |
|
1299
|
0 |
22 |
if (rv != 0) { |
|
1300
|
0 |
0 |
if (ps->user_data) SvREFCNT_dec(ps->user_data); |
|
1301
|
0 |
0 |
if (ps->cb_on_begin_headers) SvREFCNT_dec(ps->cb_on_begin_headers); |
|
1302
|
0 |
0 |
if (ps->cb_on_header) SvREFCNT_dec(ps->cb_on_header); |
|
1303
|
0 |
0 |
if (ps->cb_on_frame_recv) SvREFCNT_dec(ps->cb_on_frame_recv); |
|
1304
|
0 |
0 |
if (ps->cb_on_data_chunk_recv) SvREFCNT_dec(ps->cb_on_data_chunk_recv); |
|
1305
|
0 |
0 |
if (ps->cb_on_stream_close) SvREFCNT_dec(ps->cb_on_stream_close); |
|
1334
|
24 |
0 |
STRLEN body_len = 0; |
|
1340
|
0 |
24 |
Newxz(nva, nvlen, nghttp2_nv); |
|
1342
|
155 |
24 |
for (i = 0; i < (I32)nvlen; i++) { |
|
1344
|
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) { |
|
1349
|
155 |
0 |
if (name_sv && value_sv) { |
|
|
155 |
0 |
if (name_sv && value_sv) { |
|
1361
|
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) { |
|
1373
|
2 |
18 |
else if (SvOK(body_sv) && SvPOK(body_sv)) { |
|
|
2 |
0 |
else if (SvOK(body_sv) && SvPOK(body_sv)) { |
|
1375
|
2 |
0 |
if (body_len > 0) { |
|
1394
|
0 |
24 |
if (stream_id < 0) { |
|
1395
|
0 |
0 |
if (dp) { |
|
1396
|
0 |
0 |
if (dp->callback) SvREFCNT_dec(dp->callback); |
|
1397
|
0 |
0 |
if (dp->user_data) SvREFCNT_dec(dp->user_data); |
|
1404
|
6 |
18 |
if (dp) { |
|
1409
|
20 |
4 |
RETVAL = stream_id; |
|
1425
|
0 |
0 |
if (rv != 0) { |
|
1428
|
0 |
0 |
RETVAL = rv; |
|
1448
|
0 |
0 |
if (SvOK(opaque_data)) { |
|
1450
|
0 |
0 |
if (len != 8) { |
|
1458
|
0 |
0 |
if (rv != 0) { |
|
1461
|
0 |
0 |
RETVAL = rv; |
|
1477
|
0 |
0 |
if (rv != 0) { |
|
1480
|
0 |
0 |
RETVAL = rv; |