ds9 1.2.1 → 1.3.0

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/ext/ds9/ds9.c +58 -5
  3. data/lib/ds9.rb +1 -1
  4. data/test/helper.rb +4 -0
  5. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42d51fe49ecbc5b632752422632d97684cf61174
4
- data.tar.gz: c5858839be9feb5000e2faba3ea307e17ab3bdc1
3
+ metadata.gz: 2c4e36345289f23d14f435bc4cb397a72a5bda5d
4
+ data.tar.gz: 142a14a755b07d0ea718f3de691fb87fed448ed3
5
5
  SHA512:
6
- metadata.gz: 1be38862c11864eacb2a172822401fdcb6276af652608c1b8223681bdf374461e74c50e220dee1afba6aabbe491798e7238a157b4be28fcb0feb1bb877b05d12
7
- data.tar.gz: 0320c3c379461605ecd04697798a483d0029b86800ed8167949b550ace6c39f249408884109be357707a146f458c25b2ded16cc6d18ae36a211272b2da89a72e
6
+ metadata.gz: 52385947712d95677a593d18a16e81bbe9332042854537fcc4734fb8e5f39fb15e65380349725abe5d5ebedc9f3c6b97da573ffd18a10cc4b260924aac30551d
7
+ data.tar.gz: fcf9414805469006684c1ecd1a30297322892baa0e3d04804688aba6949a90b77ea0eecf99981f0ca3ae18315b6399947e75d74d649de49dd668c50e746d8ce6
data/ext/ds9/ds9.c CHANGED
@@ -283,6 +283,13 @@ static ssize_t rb_data_read_callback(nghttp2_session *session,
283
283
  return 0;
284
284
  }
285
285
 
286
+ if (FIXNUM_P(ret)) {
287
+ ssize_t err = NUM2INT(ret);
288
+ if (err == NGHTTP2_ERR_DEFERRED) {
289
+ return err;
290
+ }
291
+ }
292
+
286
293
  Check_Type(ret, T_STRING);
287
294
  len = RSTRING_LEN(ret);
288
295
  memcpy(buf, StringValuePtr(ret), len);
@@ -588,12 +595,16 @@ ruby_read(nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t leng
588
595
  rb_funcall(self, rb_intern("remove_post_buffer"), 1, INT2NUM(stream_id));
589
596
  *data_flags |= NGHTTP2_DATA_FLAG_EOF;
590
597
  return 0;
591
- } else if (ret == Qfalse) {
592
- return NGHTTP2_ERR_DEFERRED;
593
- } else {
594
- memcpy(buf, RSTRING_PTR(ret), RSTRING_LEN(ret));
595
- return RSTRING_LEN(ret);
598
+ } else if (FIXNUM_P(ret)) {
599
+ ssize_t err = NUM2INT(ret);
600
+ if (err == NGHTTP2_ERR_DEFERRED) {
601
+ return err;
602
+ }
596
603
  }
604
+
605
+ Check_Type(ret, T_STRING);
606
+ memcpy(buf, RSTRING_PTR(ret), RSTRING_LEN(ret));
607
+ return RSTRING_LEN(ret);
597
608
  }
598
609
 
599
610
  static ssize_t
@@ -854,6 +865,46 @@ static VALUE server_submit_response(VALUE self, VALUE stream_id, VALUE headers)
854
865
  return self;
855
866
  }
856
867
 
868
+ static VALUE server_submit_headers(VALUE self, VALUE stream_id, VALUE headers) {
869
+ nghttp2_session *session;
870
+ size_t niv;
871
+ nghttp2_nv *nva, *head;
872
+ int rv;
873
+ copy_header_func_t copy_func;
874
+
875
+ TypedData_Get_Struct(self, nghttp2_session, &ds9_session_type, session);
876
+ CheckSelf(session);
877
+
878
+ switch(TYPE(headers))
879
+ {
880
+ case T_ARRAY:
881
+ niv = RARRAY_LEN(headers);
882
+ copy_func = copy_list_to_nv;
883
+ break;
884
+ case T_HASH:
885
+ niv = RHASH_SIZE(headers);
886
+ copy_func = copy_hash_to_nv;
887
+ break;
888
+ default:
889
+ Check_Type(headers, T_ARRAY);
890
+ }
891
+
892
+ nva = xcalloc(niv, sizeof(nghttp2_nv));
893
+
894
+ copy_func(headers, nva, niv);
895
+
896
+ /* nghttp2_submit_headers is too low level API for ds9 */
897
+ rv = nghttp2_submit_response(session, NUM2INT(stream_id), nva, niv, NULL);
898
+
899
+ xfree(nva);
900
+
901
+ if (0 != rv) {
902
+ explode(rv);
903
+ }
904
+
905
+ return self;
906
+ }
907
+
857
908
  static VALUE make_callbacks(VALUE self)
858
909
  {
859
910
  nghttp2_session_callbacks *callbacks;
@@ -975,6 +1026,7 @@ void Init_ds9(void)
975
1026
 
976
1027
  rb_define_const(mDS9, "ERR_WOULDBLOCK", INT2NUM(NGHTTP2_ERR_WOULDBLOCK));
977
1028
  rb_define_const(mDS9, "ERR_EOF", INT2NUM(NGHTTP2_ERR_EOF));
1029
+ rb_define_const(mDS9, "ERR_DEFERRED", INT2NUM(NGHTTP2_ERR_DEFERRED));
978
1030
  rb_define_const(mDS9, "NO_ERROR", INT2NUM(NGHTTP2_NO_ERROR));
979
1031
  rb_define_const(mDS9, "DEFAULT_WEIGHT", INT2NUM(NGHTTP2_DEFAULT_WEIGHT));
980
1032
  rb_define_const(mDS9, "MAX_WEIGHT", INT2NUM(NGHTTP2_MAX_WEIGHT));
@@ -1020,6 +1072,7 @@ void Init_ds9(void)
1020
1072
  rb_define_method(cDS9Server, "submit_push_promise", server_submit_push_promise, 2);
1021
1073
  rb_define_method(cDS9Server, "submit_shutdown", session_submit_shutdown, 0);
1022
1074
  rb_define_method(cDS9Server, "submit_trailer", session_submit_trailer, 2);
1075
+ rb_define_method(cDS9Server, "submit_headers", server_submit_headers, 2);
1023
1076
 
1024
1077
  rb_define_singleton_method(eDS9Exception, "to_string", errors_to_string, 1);
1025
1078
 
data/lib/ds9.rb CHANGED
@@ -2,7 +2,7 @@ require 'ds9.so'
2
2
  require 'stringio'
3
3
 
4
4
  module DS9
5
- VERSION = '1.2.1'
5
+ VERSION = '1.3.0'
6
6
 
7
7
  module Frames
8
8
  class Frame
data/test/helper.rb CHANGED
@@ -205,6 +205,10 @@ module DS9
205
205
  stream.submit_response stream_id, headers
206
206
  end
207
207
 
208
+ def submit_headers headers
209
+ stream.submit_headers stream_id, headers
210
+ end
211
+
208
212
  def finish str
209
213
  body << str
210
214
  body << nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ds9
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-02 00:00:00.000000000 Z
11
+ date: 2018-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  version: '0'
121
121
  requirements: []
122
122
  rubyforge_project:
123
- rubygems_version: 2.6.14
123
+ rubygems_version: 2.6.14.1
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: This library allows you to write HTTP/2 clients and servers