ds9 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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