ds9 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +35 -0
- data/ext/ds9/ds9.c +36 -23
- data/ext/ds9/ds9_frames.c +2 -2
- data/ext/ds9/ds9_option.c +31 -1
- data/ext/ds9/extconf.rb +4 -4
- data/lib/ds9/version.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/test_ds9_option.rb +20 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8b2fb157e8388f8d381c77c4676c9d179217648a1712a96e036eebfe1fdd17d
|
4
|
+
data.tar.gz: 73283b1afcac1e5703a1d121c0dbe76c17b965b950eae9207ec0d62cf03bcecb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8df87ef9a3b64d895c28f73c102cf4269ef5018b338e873d1f990142deaeca2ec94f6a429610f9ba45d2f3c86807c5009290abe79ee88e46adc77dd8ff86fbbb
|
7
|
+
data.tar.gz: ab524840e37027405339a7e9a64c58503322b82ce56893237abe818507229ad3930adaabfbc4cf29e4ab57238f98bb6cf3a0dfb24a32893b588d4bcac77bac86
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
strategy:
|
21
|
+
matrix:
|
22
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
23
|
+
|
24
|
+
steps:
|
25
|
+
- uses: actions/checkout@v2
|
26
|
+
- name: Set up Ruby
|
27
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
28
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
29
|
+
# uses: ruby/setup-ruby@v1
|
30
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
34
|
+
- name: Run tests
|
35
|
+
run: bundle exec rake test
|
data/ext/ds9/ds9.c
CHANGED
@@ -23,7 +23,8 @@ ID id_on_header,
|
|
23
23
|
id_on_stream_close,
|
24
24
|
id_on_data_chunk_recv,
|
25
25
|
id_on_data_source_read,
|
26
|
-
id_before_frame_send
|
26
|
+
id_before_frame_send,
|
27
|
+
id_eof_p;
|
27
28
|
|
28
29
|
#define CheckSelf(ptr) \
|
29
30
|
if (NULL == (ptr)) \
|
@@ -157,7 +158,7 @@ static ssize_t recv_callback(nghttp2_session *session, uint8_t *buf,
|
|
157
158
|
VALUE ret;
|
158
159
|
ssize_t len;
|
159
160
|
|
160
|
-
ret = rb_funcall(self, id_recv_event, 1,
|
161
|
+
ret = rb_funcall(self, id_recv_event, 1, ULONG2NUM(length));
|
161
162
|
|
162
163
|
if (FIXNUM_P(ret)) {
|
163
164
|
return NUM2INT(ret);
|
@@ -270,7 +271,7 @@ static ssize_t rb_data_read_callback(nghttp2_session *session,
|
|
270
271
|
ssize_t len;
|
271
272
|
|
272
273
|
ret = rb_funcall(self, id_on_data_source_read, 2, INT2NUM(stream_id),
|
273
|
-
|
274
|
+
ULONG2NUM(length));
|
274
275
|
|
275
276
|
if (NIL_P(ret)) {
|
276
277
|
*data_flags |= NGHTTP2_DATA_FLAG_EOF;
|
@@ -320,8 +321,9 @@ struct hash_copy_ctx {
|
|
320
321
|
};
|
321
322
|
|
322
323
|
static int
|
323
|
-
hash_copy_i(VALUE name, VALUE value,
|
324
|
+
hash_copy_i(VALUE name, VALUE value, VALUE arg)
|
324
325
|
{
|
326
|
+
struct hash_copy_ctx *ctx = (struct hash_copy_ctx *)arg;
|
325
327
|
nghttp2_nv * head = ctx->head;
|
326
328
|
|
327
329
|
head->name = (uint8_t *)StringValuePtr(name);
|
@@ -341,7 +343,7 @@ static void copy_hash_to_nv(VALUE hash, nghttp2_nv * head, size_t niv)
|
|
341
343
|
struct hash_copy_ctx copy_ctx;
|
342
344
|
copy_ctx.head = head;
|
343
345
|
|
344
|
-
rb_hash_foreach(hash, hash_copy_i, ©_ctx);
|
346
|
+
rb_hash_foreach(hash, hash_copy_i, (VALUE)©_ctx);
|
345
347
|
}
|
346
348
|
|
347
349
|
static VALUE allocate_session(VALUE klass)
|
@@ -489,6 +491,7 @@ static VALUE session_submit_trailer(VALUE self, VALUE stream_id, VALUE trailers)
|
|
489
491
|
break;
|
490
492
|
default:
|
491
493
|
Check_Type(trailers, T_ARRAY);
|
494
|
+
UNREACHABLE;
|
492
495
|
}
|
493
496
|
|
494
497
|
nva = xcalloc(niv, sizeof(nghttp2_nv));
|
@@ -540,7 +543,7 @@ static VALUE session_receive(VALUE self)
|
|
540
543
|
|
541
544
|
static VALUE session_mem_receive(VALUE self, VALUE buf)
|
542
545
|
{
|
543
|
-
|
546
|
+
ssize_t rv;
|
544
547
|
nghttp2_session *session;
|
545
548
|
|
546
549
|
TypedData_Get_Struct(self, nghttp2_session, &ds9_session_type, session);
|
@@ -548,10 +551,10 @@ static VALUE session_mem_receive(VALUE self, VALUE buf)
|
|
548
551
|
|
549
552
|
rv = nghttp2_session_mem_recv(session, (const uint8_t *)StringValuePtr(buf), RSTRING_LEN(buf));
|
550
553
|
if (rv < 0) {
|
551
|
-
explode(rv);
|
554
|
+
explode((int)rv);
|
552
555
|
}
|
553
556
|
|
554
|
-
return
|
557
|
+
return ULONG2NUM(rv);
|
555
558
|
}
|
556
559
|
|
557
560
|
static VALUE session_mem_send(VALUE self)
|
@@ -570,7 +573,7 @@ static VALUE session_mem_send(VALUE self)
|
|
570
573
|
}
|
571
574
|
|
572
575
|
if (rv < 0) {
|
573
|
-
explode(rv);
|
576
|
+
explode((int)rv);
|
574
577
|
}
|
575
578
|
|
576
579
|
return rb_str_new((const char *)data, rv);
|
@@ -583,27 +586,33 @@ static VALUE session_outbound_queue_size(VALUE self)
|
|
583
586
|
TypedData_Get_Struct(self, nghttp2_session, &ds9_session_type, session);
|
584
587
|
CheckSelf(session);
|
585
588
|
|
586
|
-
return
|
589
|
+
return ULONG2NUM(nghttp2_session_get_outbound_queue_size(session));
|
587
590
|
}
|
588
591
|
|
589
592
|
static ssize_t
|
590
593
|
ruby_read(nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length,
|
591
594
|
uint32_t *data_flags, nghttp2_data_source *source, void *user_data)
|
592
595
|
{
|
593
|
-
VALUE
|
596
|
+
VALUE body = (VALUE)source->ptr;
|
597
|
+
VALUE ret = rb_funcall(body, rb_intern("read"), 1, ULONG2NUM(length));
|
594
598
|
|
595
|
-
if (
|
596
|
-
VALUE self = (VALUE)user_data;
|
597
|
-
rb_funcall(self, rb_intern("remove_post_buffer"), 1, INT2NUM(stream_id));
|
598
|
-
*data_flags |= NGHTTP2_DATA_FLAG_EOF;
|
599
|
-
return 0;
|
600
|
-
} else if (FIXNUM_P(ret)) {
|
599
|
+
if (FIXNUM_P(ret)) {
|
601
600
|
ssize_t err = NUM2INT(ret);
|
602
601
|
if (err == NGHTTP2_ERR_DEFERRED) {
|
603
602
|
return err;
|
604
603
|
}
|
605
604
|
}
|
606
605
|
|
606
|
+
if (NIL_P(ret) || (rb_respond_to(body, id_eof_p) && RTEST(rb_funcall(body, id_eof_p, 0)))) {
|
607
|
+
VALUE self = (VALUE)user_data;
|
608
|
+
rb_funcall(self, rb_intern("remove_post_buffer"), 1, INT2NUM(stream_id));
|
609
|
+
*data_flags |= NGHTTP2_DATA_FLAG_EOF;
|
610
|
+
}
|
611
|
+
|
612
|
+
if (NIL_P(ret)) {
|
613
|
+
return 0;
|
614
|
+
}
|
615
|
+
|
607
616
|
Check_Type(ret, T_STRING);
|
608
617
|
memcpy(buf, RSTRING_PTR(ret), RSTRING_LEN(ret));
|
609
618
|
return RSTRING_LEN(ret);
|
@@ -635,8 +644,8 @@ file_read(nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t leng
|
|
635
644
|
|
636
645
|
static VALUE session_submit_request(VALUE self, VALUE settings, VALUE body)
|
637
646
|
{
|
638
|
-
size_t niv
|
639
|
-
nghttp2_nv *nva
|
647
|
+
size_t niv;
|
648
|
+
nghttp2_nv *nva;
|
640
649
|
nghttp2_session *session;
|
641
650
|
nghttp2_data_provider provider;
|
642
651
|
int rv;
|
@@ -657,6 +666,7 @@ static VALUE session_submit_request(VALUE self, VALUE settings, VALUE body)
|
|
657
666
|
break;
|
658
667
|
default:
|
659
668
|
Check_Type(settings, T_ARRAY);
|
669
|
+
UNREACHABLE;
|
660
670
|
}
|
661
671
|
|
662
672
|
nva = xcalloc(niv, sizeof(nghttp2_nv));
|
@@ -673,7 +683,7 @@ static VALUE session_submit_request(VALUE self, VALUE settings, VALUE body)
|
|
673
683
|
provider.source.ptr = rb_file;
|
674
684
|
provider.read_callback = file_read;
|
675
685
|
} else {
|
676
|
-
provider.source.ptr = body;
|
686
|
+
provider.source.ptr = (void *)body;
|
677
687
|
provider.read_callback = ruby_read;
|
678
688
|
}
|
679
689
|
|
@@ -828,7 +838,7 @@ static VALUE server_submit_response(VALUE self, VALUE stream_id, VALUE headers)
|
|
828
838
|
{
|
829
839
|
nghttp2_session *session;
|
830
840
|
size_t niv;
|
831
|
-
nghttp2_nv *nva
|
841
|
+
nghttp2_nv *nva;
|
832
842
|
nghttp2_data_provider provider;
|
833
843
|
int rv;
|
834
844
|
copy_header_func_t copy_func;
|
@@ -848,6 +858,7 @@ static VALUE server_submit_response(VALUE self, VALUE stream_id, VALUE headers)
|
|
848
858
|
break;
|
849
859
|
default:
|
850
860
|
Check_Type(headers, T_ARRAY);
|
861
|
+
UNREACHABLE;
|
851
862
|
}
|
852
863
|
|
853
864
|
nva = xcalloc(niv, sizeof(nghttp2_nv));
|
@@ -870,7 +881,7 @@ static VALUE server_submit_response(VALUE self, VALUE stream_id, VALUE headers)
|
|
870
881
|
static VALUE server_submit_headers(VALUE self, VALUE stream_id, VALUE headers) {
|
871
882
|
nghttp2_session *session;
|
872
883
|
size_t niv;
|
873
|
-
nghttp2_nv *nva
|
884
|
+
nghttp2_nv *nva;
|
874
885
|
int rv;
|
875
886
|
copy_header_func_t copy_func;
|
876
887
|
|
@@ -889,6 +900,7 @@ static VALUE server_submit_headers(VALUE self, VALUE stream_id, VALUE headers) {
|
|
889
900
|
break;
|
890
901
|
default:
|
891
902
|
Check_Type(headers, T_ARRAY);
|
903
|
+
UNREACHABLE;
|
892
904
|
}
|
893
905
|
|
894
906
|
nva = xcalloc(niv, sizeof(nghttp2_nv));
|
@@ -1043,7 +1055,7 @@ void Init_ds9(void)
|
|
1043
1055
|
|
1044
1056
|
rb_define_singleton_method(mDS9, "nghttp_version", rb_nghttp_version, 0);
|
1045
1057
|
|
1046
|
-
cDS9Callbacks = rb_define_class_under(mDS9, "Callbacks",
|
1058
|
+
cDS9Callbacks = rb_define_class_under(mDS9, "Callbacks", rb_cObject);
|
1047
1059
|
|
1048
1060
|
cDS9Session = rb_define_class_under(mDS9, "Session", rb_cObject);
|
1049
1061
|
cDS9Client = rb_define_class_under(mDS9, "Client", cDS9Session);
|
@@ -1093,6 +1105,7 @@ void Init_ds9(void)
|
|
1093
1105
|
id_on_data_chunk_recv = rb_intern("on_data_chunk_recv");
|
1094
1106
|
id_before_frame_send = rb_intern("before_frame_send");
|
1095
1107
|
id_on_data_source_read = rb_intern("on_data_source_read");
|
1108
|
+
id_eof_p = rb_intern("eof?");
|
1096
1109
|
}
|
1097
1110
|
|
1098
1111
|
/* vim: set noet sws=4 sw=4: */
|
data/ext/ds9/ds9_frames.c
CHANGED
@@ -45,7 +45,7 @@ VALUE WrapDS9FrameHeader(const nghttp2_frame_hd *hd)
|
|
45
45
|
{
|
46
46
|
VALUE klass = rb_const_get(cDS9FramesFrame, rb_intern("Header"));
|
47
47
|
return rb_funcall(klass, rb_intern("new"), 4,
|
48
|
-
|
48
|
+
ULONG2NUM(hd->length),
|
49
49
|
INT2NUM(hd->stream_id),
|
50
50
|
INT2NUM(hd->type),
|
51
51
|
INT2NUM(hd->flags));
|
@@ -127,7 +127,7 @@ static VALUE goaway_error_code(VALUE self)
|
|
127
127
|
void Init_ds9_frames(VALUE mDS9)
|
128
128
|
{
|
129
129
|
mDS9Frames = rb_define_module_under(mDS9, "Frames");
|
130
|
-
cDS9FramesFrame = rb_define_class_under(mDS9Frames, "Frame",
|
130
|
+
cDS9FramesFrame = rb_define_class_under(mDS9Frames, "Frame", rb_cObject);
|
131
131
|
|
132
132
|
mDS9FramesFlags = rb_define_module_under(cDS9FramesFrame, "Flags");
|
133
133
|
|
data/ext/ds9/ds9_option.c
CHANGED
@@ -122,6 +122,30 @@ static VALUE option_set_user_recv_extension_type(VALUE self, VALUE size)
|
|
122
122
|
return self;
|
123
123
|
}
|
124
124
|
|
125
|
+
#if NGHTTP2_VERSION_NUM >= 0x012800 /* 1.40.0 */
|
126
|
+
static VALUE option_set_max_outbound_ack(VALUE self, VALUE size)
|
127
|
+
{
|
128
|
+
nghttp2_option *option;
|
129
|
+
TypedData_Get_Struct(self, nghttp2_option, &ds9_option_type, option);
|
130
|
+
|
131
|
+
nghttp2_option_set_max_outbound_ack(option, NUM2INT(size));
|
132
|
+
|
133
|
+
return self;
|
134
|
+
}
|
135
|
+
#endif
|
136
|
+
|
137
|
+
#if NGHTTP2_VERSION_NUM >= 0x012900 /* 1.41.0 */
|
138
|
+
static VALUE option_set_max_settings(VALUE self, VALUE size)
|
139
|
+
{
|
140
|
+
nghttp2_option *option;
|
141
|
+
TypedData_Get_Struct(self, nghttp2_option, &ds9_option_type, option);
|
142
|
+
|
143
|
+
nghttp2_option_set_max_settings(option, NUM2INT(size));
|
144
|
+
|
145
|
+
return self;
|
146
|
+
}
|
147
|
+
#endif
|
148
|
+
|
125
149
|
nghttp2_option* UnwrapDS9Option(VALUE opt)
|
126
150
|
{
|
127
151
|
nghttp2_option* option = NULL;
|
@@ -135,7 +159,7 @@ nghttp2_option* UnwrapDS9Option(VALUE opt)
|
|
135
159
|
|
136
160
|
void Init_ds9_option(VALUE mDS9)
|
137
161
|
{
|
138
|
-
cDS9Option = rb_define_class_under(mDS9, "Option",
|
162
|
+
cDS9Option = rb_define_class_under(mDS9, "Option", rb_cObject);
|
139
163
|
rb_define_alloc_func(cDS9Option, allocate_option);
|
140
164
|
|
141
165
|
rb_define_method(cDS9Option, "set_no_auto_ping_ack", option_set_no_auto_ping_ack, 0);
|
@@ -150,4 +174,10 @@ void Init_ds9_option(VALUE mDS9)
|
|
150
174
|
rb_define_method(cDS9Option, "set_max_reserved_remote_streams", option_set_max_reserved_remote_streams, 1);
|
151
175
|
rb_define_method(cDS9Option, "set_peer_max_concurrent_streams", option_set_peer_max_concurrent_streams, 1);
|
152
176
|
rb_define_method(cDS9Option, "set_user_recv_extension_type", option_set_user_recv_extension_type, 1);
|
177
|
+
#if NGHTTP2_VERSION_NUM >= 0x012800 /* 1.40.0 */
|
178
|
+
rb_define_method(cDS9Option, "set_max_outbound_ack", option_set_max_outbound_ack, 1);
|
179
|
+
#endif
|
180
|
+
#if NGHTTP2_VERSION_NUM >= 0x012900 /* 1.41.0 */
|
181
|
+
rb_define_method(cDS9Option, "set_max_settings", option_set_max_settings, 1);
|
182
|
+
#endif
|
153
183
|
}
|
data/ext/ds9/extconf.rb
CHANGED
@@ -23,12 +23,12 @@ else
|
|
23
23
|
message "Building nghttp2\n"
|
24
24
|
require 'rubygems'
|
25
25
|
require 'mini_portile2'
|
26
|
-
recipe = MiniPortile.new('nghttp2', 'v1.
|
27
|
-
recipe.configure_options = recipe.configure_options + ['--with-pic', '--
|
26
|
+
recipe = MiniPortile.new('nghttp2', 'v1.43.0')
|
27
|
+
recipe.configure_options = recipe.configure_options + ['--with-pic', '--enable-lib-only']
|
28
28
|
|
29
29
|
recipe.files << {
|
30
|
-
url: 'https://github.com/nghttp2/nghttp2/releases/download/v1.
|
31
|
-
sha1: '
|
30
|
+
url: 'https://github.com/nghttp2/nghttp2/releases/download/v1.43.0/nghttp2-1.43.0.tar.gz',
|
31
|
+
sha1: '8686c8ceee769de8b9e304739b223981df9df104',
|
32
32
|
}
|
33
33
|
recipe.cook
|
34
34
|
|
data/lib/ds9/version.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_ds9_option.rb
CHANGED
@@ -84,4 +84,24 @@ class TestMeme < Minitest::Test
|
|
84
84
|
assert @option.set_user_recv_extension_type('invalid')
|
85
85
|
end
|
86
86
|
end
|
87
|
+
|
88
|
+
def test_set_max_outbound_ack
|
89
|
+
assert @option.set_max_outbound_ack(100)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_set_max_outbound_ack_with_not_num
|
93
|
+
assert_raises TypeError do
|
94
|
+
assert @option.set_max_outbound_ack('invalid')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_set_max_settings
|
99
|
+
assert @option.set_max_settings(16)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_set_max_settings_with_not_num
|
103
|
+
assert_raises TypeError do
|
104
|
+
assert @option.set_max_settings('invalid')
|
105
|
+
end
|
106
|
+
end
|
87
107
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ds9
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
- Yuta Iwama
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
date: 2015-07-06 00:00:00.000000000 Z
|
@@ -95,6 +95,7 @@ extra_rdoc_files:
|
|
95
95
|
- README.md
|
96
96
|
files:
|
97
97
|
- ".autotest"
|
98
|
+
- ".github/workflows/ruby.yml"
|
98
99
|
- ".gitignore"
|
99
100
|
- CHANGELOG.md
|
100
101
|
- Gemfile
|
@@ -118,7 +119,7 @@ homepage: https://github.com/tenderlove/ds9
|
|
118
119
|
licenses:
|
119
120
|
- MIT
|
120
121
|
metadata: {}
|
121
|
-
post_install_message:
|
122
|
+
post_install_message:
|
122
123
|
rdoc_options:
|
123
124
|
- "--main"
|
124
125
|
- README.md
|
@@ -135,8 +136,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
136
|
- !ruby/object:Gem::Version
|
136
137
|
version: '0'
|
137
138
|
requirements: []
|
138
|
-
rubygems_version: 3.
|
139
|
-
signing_key:
|
139
|
+
rubygems_version: 3.2.14
|
140
|
+
signing_key:
|
140
141
|
specification_version: 4
|
141
142
|
summary: This library allows you to write HTTP/2 clients and servers
|
142
143
|
test_files: []
|