ds9 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|