thrift 0.9.1 → 0.13.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 (74) hide show
  1. checksums.yaml +6 -14
  2. data/{README → README.md} +0 -0
  3. data/ext/binary_protocol_accelerated.c +12 -12
  4. data/ext/compact_protocol.c +4 -2
  5. data/ext/constants.h +3 -0
  6. data/ext/extconf.rb +3 -1
  7. data/ext/memory_buffer.c +1 -1
  8. data/ext/strlcpy.h +7 -3
  9. data/ext/struct.c +27 -4
  10. data/ext/thrift_native.c +6 -0
  11. data/lib/thrift.rb +8 -5
  12. data/lib/thrift/client.rb +13 -4
  13. data/lib/thrift/multiplexed_processor.rb +76 -0
  14. data/lib/thrift/processor.rb +24 -6
  15. data/lib/thrift/protocol/base_protocol.rb +13 -3
  16. data/lib/thrift/protocol/binary_protocol.rb +8 -1
  17. data/lib/thrift/protocol/binary_protocol_accelerated.rb +8 -0
  18. data/lib/thrift/protocol/compact_protocol.rb +10 -1
  19. data/lib/thrift/protocol/json_protocol.rb +23 -6
  20. data/lib/thrift/protocol/multiplexed_protocol.rb +44 -0
  21. data/lib/thrift/protocol/protocol_decorator.rb +194 -0
  22. data/lib/thrift/server/base_server.rb +8 -2
  23. data/lib/thrift/server/simple_server.rb +5 -1
  24. data/lib/thrift/server/thread_pool_server.rb +5 -1
  25. data/lib/thrift/server/threaded_server.rb +5 -1
  26. data/lib/thrift/transport/base_server_transport.rb +1 -1
  27. data/lib/thrift/transport/base_transport.rb +8 -0
  28. data/lib/thrift/transport/buffered_transport.rb +9 -1
  29. data/lib/thrift/transport/framed_transport.rb +9 -1
  30. data/lib/thrift/transport/http_client_transport.rb +5 -0
  31. data/lib/thrift/transport/io_stream_transport.rb +4 -1
  32. data/lib/thrift/transport/memory_buffer_transport.rb +4 -0
  33. data/lib/thrift/transport/server_socket.rb +6 -1
  34. data/lib/thrift/transport/socket.rb +21 -17
  35. data/lib/thrift/transport/ssl_server_socket.rb +41 -0
  36. data/lib/thrift/transport/ssl_socket.rb +51 -0
  37. data/lib/thrift/transport/unix_server_socket.rb +5 -1
  38. data/lib/thrift/transport/unix_socket.rb +5 -1
  39. data/lib/thrift/union.rb +3 -6
  40. data/spec/BaseService.thrift +27 -0
  41. data/spec/ExtendedService.thrift +25 -0
  42. data/spec/Referenced.thrift +44 -0
  43. data/spec/ThriftNamespacedSpec.thrift +53 -0
  44. data/spec/base_protocol_spec.rb +79 -71
  45. data/spec/base_transport_spec.rb +155 -117
  46. data/spec/binary_protocol_accelerated_spec.rb +6 -2
  47. data/spec/binary_protocol_spec.rb +16 -8
  48. data/spec/binary_protocol_spec_shared.rb +75 -72
  49. data/spec/bytes_spec.rb +38 -38
  50. data/spec/client_spec.rb +41 -42
  51. data/spec/compact_protocol_spec.rb +32 -17
  52. data/spec/exception_spec.rb +54 -54
  53. data/spec/flat_spec.rb +62 -0
  54. data/spec/http_client_spec.rb +52 -33
  55. data/spec/json_protocol_spec.rb +170 -131
  56. data/spec/namespaced_spec.rb +67 -0
  57. data/spec/nonblocking_server_spec.rb +16 -16
  58. data/spec/processor_spec.rb +26 -26
  59. data/spec/serializer_spec.rb +20 -20
  60. data/spec/server_socket_spec.rb +27 -22
  61. data/spec/server_spec.rb +91 -51
  62. data/spec/socket_spec.rb +23 -16
  63. data/spec/socket_spec_shared.rb +31 -31
  64. data/spec/spec_helper.rb +4 -1
  65. data/spec/ssl_server_socket_spec.rb +34 -0
  66. data/spec/ssl_socket_spec.rb +78 -0
  67. data/spec/struct_nested_containers_spec.rb +24 -24
  68. data/spec/struct_spec.rb +120 -120
  69. data/spec/thin_http_server_spec.rb +19 -18
  70. data/spec/types_spec.rb +56 -53
  71. data/spec/union_spec.rb +51 -40
  72. data/spec/unix_socket_spec.rb +43 -34
  73. metadata +189 -123
  74. data/CHANGELOG +0 -1
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MzRjZDcyMTAwY2Y3MTJkYTU2Mzk1MzdmYWYyOWFiMzAwOWU3NzYwZA==
5
- data.tar.gz: !binary |-
6
- N2Y2MDQ4ZjBhYWM1N2IyOGI2ODE5NDYzNzBjZmRmYTI0NDIxODc1MQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NWE1NzdmMDg3NjdiZGQzNjdkNzhhYzE1NTVkOGMxN2NlMzRmMmUxZDQ1NWNj
10
- ZTUyNGM1YWRjNjM0MDViMWUzMWVjMzY5YzhiNzBhYWJmODk5OGUwODk3NjRh
11
- NTgwNzdhZjIyYWJiZTMxZmJlODdlYzlmYjQ2MWI5ZGU2NmVmZDE=
12
- data.tar.gz: !binary |-
13
- YTE1ODAyOTM5M2E4OGFlMmYyNDFjYjVkMTcyMjA4MDEzM2I1MmE3ZDg2ZmIy
14
- MGVjYjFhM2VlOGZlM2U2YjM0YzdkZTgxYmJjNmExMDIyNTIyNDc4MGY5ZjUx
15
- MjhiY2Y3NzM5NGIwZGE5MWMyOTY2ZmU0YWI3YzI4MTYwMzg1Nzc=
2
+ SHA256:
3
+ metadata.gz: 6c894aeced9c6d4f7f4e66441472dbe37603b45722cffe89007e6faa1d2771c8
4
+ data.tar.gz: 3417f5e29c4459b18933e1a6c2eb6575ce0b8c6c073bac4836043742854a8c01
5
+ SHA512:
6
+ metadata.gz: 4daf374c7752cfd11fb60fa7f1a5323f026bacbff118987f7e4342bfc79e9da8cc80e2872ddf571e2b705a310fe7921bc0c011215ec5f222cee252e0ec9a513f
7
+ data.tar.gz: 4712fd01cd41fde2877df76808af17ce303656c3a003dcda92c876766aba508cdaf802511e3698ce5f4476064a435057e47493f05a2e4f928c67e16ec7554562
File without changes
@@ -283,27 +283,27 @@ VALUE rb_thrift_binary_proto_read_message_end(VALUE self) {
283
283
  return Qnil;
284
284
  }
285
285
 
286
- VALUE rb_thift_binary_proto_read_struct_begin(VALUE self) {
286
+ VALUE rb_thrift_binary_proto_read_struct_begin(VALUE self) {
287
287
  return Qnil;
288
288
  }
289
289
 
290
- VALUE rb_thift_binary_proto_read_struct_end(VALUE self) {
290
+ VALUE rb_thrift_binary_proto_read_struct_end(VALUE self) {
291
291
  return Qnil;
292
292
  }
293
293
 
294
- VALUE rb_thift_binary_proto_read_field_end(VALUE self) {
294
+ VALUE rb_thrift_binary_proto_read_field_end(VALUE self) {
295
295
  return Qnil;
296
296
  }
297
297
 
298
- VALUE rb_thift_binary_proto_read_map_end(VALUE self) {
298
+ VALUE rb_thrift_binary_proto_read_map_end(VALUE self) {
299
299
  return Qnil;
300
300
  }
301
301
 
302
- VALUE rb_thift_binary_proto_read_list_end(VALUE self) {
302
+ VALUE rb_thrift_binary_proto_read_list_end(VALUE self) {
303
303
  return Qnil;
304
304
  }
305
305
 
306
- VALUE rb_thift_binary_proto_read_set_end(VALUE self) {
306
+ VALUE rb_thrift_binary_proto_read_set_end(VALUE self) {
307
307
  return Qnil;
308
308
  }
309
309
 
@@ -449,12 +449,12 @@ void Init_binary_protocol_accelerated() {
449
449
  rb_define_method(bpa_class, "read_binary", rb_thrift_binary_proto_read_binary, 0);
450
450
  // unused methods
451
451
  rb_define_method(bpa_class, "read_message_end", rb_thrift_binary_proto_read_message_end, 0);
452
- rb_define_method(bpa_class, "read_struct_begin", rb_thift_binary_proto_read_struct_begin, 0);
453
- rb_define_method(bpa_class, "read_struct_end", rb_thift_binary_proto_read_struct_end, 0);
454
- rb_define_method(bpa_class, "read_field_end", rb_thift_binary_proto_read_field_end, 0);
455
- rb_define_method(bpa_class, "read_map_end", rb_thift_binary_proto_read_map_end, 0);
456
- rb_define_method(bpa_class, "read_list_end", rb_thift_binary_proto_read_list_end, 0);
457
- rb_define_method(bpa_class, "read_set_end", rb_thift_binary_proto_read_set_end, 0);
452
+ rb_define_method(bpa_class, "read_struct_begin", rb_thrift_binary_proto_read_struct_begin, 0);
453
+ rb_define_method(bpa_class, "read_struct_end", rb_thrift_binary_proto_read_struct_end, 0);
454
+ rb_define_method(bpa_class, "read_field_end", rb_thrift_binary_proto_read_field_end, 0);
455
+ rb_define_method(bpa_class, "read_map_end", rb_thrift_binary_proto_read_map_end, 0);
456
+ rb_define_method(bpa_class, "read_list_end", rb_thrift_binary_proto_read_list_end, 0);
457
+ rb_define_method(bpa_class, "read_set_end", rb_thrift_binary_proto_read_set_end, 0);
458
458
 
459
459
  rbuf_ivar_id = rb_intern("@rbuf");
460
460
  }
@@ -40,6 +40,7 @@ static ID rbuf_ivar_id;
40
40
  static int VERSION;
41
41
  static int VERSION_MASK;
42
42
  static int TYPE_MASK;
43
+ static int TYPE_BITS;
43
44
  static int TYPE_SHIFT_AMOUNT;
44
45
  static int PROTOCOL_ID;
45
46
 
@@ -315,7 +316,7 @@ VALUE rb_thrift_compact_proto_write_binary(VALUE self, VALUE buf) {
315
316
  buf = force_binary_encoding(buf);
316
317
  VALUE transport = GET_TRANSPORT(self);
317
318
  write_varint32(transport, RSTRING_LEN(buf));
318
- WRITE(transport, RSTRING_PTR(buf), RSTRING_LEN(buf));
319
+ WRITE(transport, StringValuePtr(buf), RSTRING_LEN(buf));
319
320
  return Qnil;
320
321
  }
321
322
 
@@ -450,7 +451,7 @@ VALUE rb_thrift_compact_proto_read_message_begin(VALUE self) {
450
451
  rb_exc_raise(get_protocol_exception(INT2FIX(-1), rb_str_new2(buf)));
451
452
  }
452
453
 
453
- int8_t type = (version_and_type >> TYPE_SHIFT_AMOUNT) & 0x03;
454
+ int8_t type = (version_and_type >> TYPE_SHIFT_AMOUNT) & TYPE_BITS;
454
455
  int32_t seqid = read_varint64(self);
455
456
  VALUE messageName = rb_thrift_compact_proto_read_string(self);
456
457
  return rb_ary_new3(3, messageName, INT2FIX(type), INT2NUM(seqid));
@@ -570,6 +571,7 @@ static void Init_constants() {
570
571
  VERSION = rb_num2ll(rb_const_get(thrift_compact_protocol_class, rb_intern("VERSION")));
571
572
  VERSION_MASK = rb_num2ll(rb_const_get(thrift_compact_protocol_class, rb_intern("VERSION_MASK")));
572
573
  TYPE_MASK = rb_num2ll(rb_const_get(thrift_compact_protocol_class, rb_intern("TYPE_MASK")));
574
+ TYPE_BITS = rb_num2ll(rb_const_get(thrift_compact_protocol_class, rb_intern("TYPE_BITS")));
573
575
  TYPE_SHIFT_AMOUNT = FIX2INT(rb_const_get(thrift_compact_protocol_class, rb_intern("TYPE_SHIFT_AMOUNT")));
574
576
  PROTOCOL_ID = FIX2INT(rb_const_get(thrift_compact_protocol_class, rb_intern("PROTOCOL_ID")));
575
577
 
@@ -42,6 +42,7 @@ extern ID write_i32_method_id;
42
42
  extern ID write_i64_method_id;
43
43
  extern ID write_double_method_id;
44
44
  extern ID write_string_method_id;
45
+ extern ID write_binary_method_id;
45
46
  extern ID write_map_begin_method_id;
46
47
  extern ID write_map_end_method_id;
47
48
  extern ID write_list_begin_method_id;
@@ -54,6 +55,7 @@ extern ID read_i16_method_id;
54
55
  extern ID read_i32_method_id;
55
56
  extern ID read_i64_method_id;
56
57
  extern ID read_string_method_id;
58
+ extern ID read_binary_method_id;
57
59
  extern ID read_double_method_id;
58
60
  extern ID read_map_begin_method_id;
59
61
  extern ID read_map_end_method_id;
@@ -87,6 +89,7 @@ extern VALUE key_sym;
87
89
  extern VALUE value_sym;
88
90
  extern VALUE element_sym;
89
91
  extern VALUE class_sym;
92
+ extern VALUE binary_sym;
90
93
 
91
94
  extern VALUE rb_cSet;
92
95
  extern VALUE thrift_module;
@@ -21,8 +21,10 @@ if defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/
21
21
  File.open('Makefile', 'w'){|f| f.puts "all:\n\ninstall:\n" }
22
22
  else
23
23
  require 'mkmf'
24
+ require 'rbconfig'
25
+
26
+ $ARCH_FLAGS = RbConfig::CONFIG['CFLAGS'].scan( /(-arch )(\S+)/ ).map{|x,y| x + y + ' ' }.join('')
24
27
 
25
- $ARCH_FLAGS = Config::CONFIG['CFLAGS'].scan( /(-arch )(\S+)/ ).map{|x,y| x + y + ' ' }.join('')
26
28
 
27
29
  $CFLAGS = "-fsigned-char -g -O2 -Wall -Werror " + $ARCH_FLAGS
28
30
 
@@ -39,7 +39,7 @@ VALUE rb_thrift_memory_buffer_read_into_buffer(VALUE self, VALUE buffer_value, V
39
39
  VALUE rb_thrift_memory_buffer_write(VALUE self, VALUE str) {
40
40
  VALUE buf = GET_BUF(self);
41
41
  str = force_binary_encoding(str);
42
- rb_str_buf_cat(buf, RSTRING_PTR(str), RSTRING_LEN(str));
42
+ rb_str_buf_cat(buf, StringValuePtr(str), RSTRING_LEN(str));
43
43
  return Qnil;
44
44
  }
45
45
 
@@ -17,14 +17,18 @@
17
17
  * under the License.
18
18
  */
19
19
 
20
-
21
20
  #include <sys/types.h>
22
21
  #include <string.h>
23
22
 
23
+ #ifndef __has_builtin
24
+ #define __has_builtin(x) 0
25
+ #endif
26
+
24
27
  #ifndef HAVE_STRLCPY
25
- size_t
26
- strlcpy (char *dst, const char *src, size_t dst_sz);
28
+ size_t strlcpy (char *dst, const char *src, size_t dst_sz);
27
29
  #else
30
+ #if !__has_builtin(strlcpy)
28
31
  extern size_t strlcpy(char *, const char *, size_t);
29
32
  #endif
33
+ #endif
30
34
 
@@ -75,6 +75,11 @@ VALUE default_write_string(VALUE protocol, VALUE value) {
75
75
  return Qnil;
76
76
  }
77
77
 
78
+ VALUE default_write_binary(VALUE protocol, VALUE value) {
79
+ rb_funcall(protocol, write_binary_method_id, 1, value);
80
+ return Qnil;
81
+ }
82
+
78
83
  VALUE default_write_list_begin(VALUE protocol, VALUE etype, VALUE length) {
79
84
  rb_funcall(protocol, write_list_begin_method_id, 2, etype, length);
80
85
  return Qnil;
@@ -190,6 +195,10 @@ VALUE default_read_string(VALUE protocol) {
190
195
  return rb_funcall(protocol, read_string_method_id, 0);
191
196
  }
192
197
 
198
+ VALUE default_read_binary(VALUE protocol) {
199
+ return rb_funcall(protocol, read_binary_method_id, 0);
200
+ }
201
+
193
202
  VALUE default_read_struct_begin(VALUE protocol) {
194
203
  return rb_funcall(protocol, read_struct_begin_method_id, 0);
195
204
  }
@@ -281,7 +290,7 @@ static void write_container(int ttype, VALUE field_info, VALUE value, VALUE prot
281
290
 
282
291
  if (TYPE(value) == T_ARRAY) {
283
292
  items = value;
284
- } else {
293
+ } else {
285
294
  if (rb_cSet == CLASS_OF(value)) {
286
295
  items = rb_funcall(value, entries_method_id, 0);
287
296
  } else {
@@ -327,7 +336,12 @@ static void write_anything(int ttype, VALUE value, VALUE protocol, VALUE field_i
327
336
  } else if (ttype == TTYPE_DOUBLE) {
328
337
  default_write_double(protocol, value);
329
338
  } else if (ttype == TTYPE_STRING) {
330
- default_write_string(protocol, value);
339
+ VALUE is_binary = rb_hash_aref(field_info, binary_sym);
340
+ if (is_binary != Qtrue) {
341
+ default_write_string(protocol, value);
342
+ } else {
343
+ default_write_binary(protocol, value);
344
+ }
331
345
  } else if (IS_CONTAINER(ttype)) {
332
346
  write_container(ttype, field_info, value, protocol);
333
347
  } else if (ttype == TTYPE_STRUCT) {
@@ -430,7 +444,12 @@ static VALUE read_anything(VALUE protocol, int ttype, VALUE field_info) {
430
444
  } else if (ttype == TTYPE_I64) {
431
445
  result = default_read_i64(protocol);
432
446
  } else if (ttype == TTYPE_STRING) {
433
- result = default_read_string(protocol);
447
+ VALUE is_binary = rb_hash_aref(field_info, binary_sym);
448
+ if (is_binary != Qtrue) {
449
+ result = default_read_string(protocol);
450
+ } else {
451
+ result = default_read_binary(protocol);
452
+ }
434
453
  } else if (ttype == TTYPE_DOUBLE) {
435
454
  result = default_read_double(protocol);
436
455
  } else if (ttype == TTYPE_STRUCT) {
@@ -607,7 +626,7 @@ static VALUE rb_thrift_union_read(VALUE self, VALUE protocol) {
607
626
  if (field_type == specified_type) {
608
627
  // read the value
609
628
  VALUE name = rb_hash_aref(field_info, name_sym);
610
- rb_iv_set(self, "@setfield", ID2SYM(rb_intern(RSTRING_PTR(name))));
629
+ rb_iv_set(self, "@setfield", rb_str_intern(name));
611
630
  rb_iv_set(self, "@value", read_anything(protocol, field_type, field_info));
612
631
  } else {
613
632
  rb_funcall(protocol, skip_method_id, 1, field_type_value);
@@ -651,6 +670,10 @@ static VALUE rb_thrift_union_write(VALUE self, VALUE protocol) {
651
670
 
652
671
  VALUE field_info = rb_hash_aref(struct_fields, field_id);
653
672
 
673
+ if(NIL_P(field_info)) {
674
+ rb_raise(rb_eRuntimeError, "set_field is not valid for this union!");
675
+ }
676
+
654
677
  VALUE ttype_value = rb_hash_aref(field_info, type_sym);
655
678
  int ttype = FIX2INT(ttype_value);
656
679
 
@@ -57,6 +57,7 @@ ID write_i32_method_id;
57
57
  ID write_i64_method_id;
58
58
  ID write_double_method_id;
59
59
  ID write_string_method_id;
60
+ ID write_binary_method_id;
60
61
  ID write_map_begin_method_id;
61
62
  ID write_map_end_method_id;
62
63
  ID write_list_begin_method_id;
@@ -69,6 +70,7 @@ ID read_i16_method_id;
69
70
  ID read_i32_method_id;
70
71
  ID read_i64_method_id;
71
72
  ID read_string_method_id;
73
+ ID read_binary_method_id;
72
74
  ID read_double_method_id;
73
75
  ID read_map_begin_method_id;
74
76
  ID read_map_end_method_id;
@@ -104,6 +106,7 @@ VALUE key_sym;
104
106
  VALUE value_sym;
105
107
  VALUE element_sym;
106
108
  VALUE class_sym;
109
+ VALUE binary_sym;
107
110
  VALUE protocol_exception_class;
108
111
 
109
112
  void Init_thrift_native() {
@@ -140,6 +143,7 @@ void Init_thrift_native() {
140
143
  write_i64_method_id = rb_intern("write_i64");
141
144
  write_double_method_id = rb_intern("write_double");
142
145
  write_string_method_id = rb_intern("write_string");
146
+ write_binary_method_id = rb_intern("write_binary");
143
147
  write_map_begin_method_id = rb_intern("write_map_begin");
144
148
  write_map_end_method_id = rb_intern("write_map_end");
145
149
  write_list_begin_method_id = rb_intern("write_list_begin");
@@ -152,6 +156,7 @@ void Init_thrift_native() {
152
156
  read_i32_method_id = rb_intern("read_i32");
153
157
  read_i64_method_id = rb_intern("read_i64");
154
158
  read_string_method_id = rb_intern("read_string");
159
+ read_binary_method_id = rb_intern("read_binary");
155
160
  read_double_method_id = rb_intern("read_double");
156
161
  read_map_begin_method_id = rb_intern("read_map_begin");
157
162
  read_map_end_method_id = rb_intern("read_map_end");
@@ -187,6 +192,7 @@ void Init_thrift_native() {
187
192
  value_sym = ID2SYM(rb_intern("value"));
188
193
  element_sym = ID2SYM(rb_intern("element"));
189
194
  class_sym = ID2SYM(rb_intern("class"));
195
+ binary_sym = ID2SYM(rb_intern("binary"));
190
196
 
191
197
  Init_struct();
192
198
  Init_binary_protocol_accelerated();
@@ -1,4 +1,4 @@
1
- #
1
+ #
2
2
  # Licensed to the Apache Software Foundation (ASF) under one
3
3
  # or more contributor license agreements. See the NOTICE file
4
4
  # distributed with this work for additional information
@@ -6,16 +6,16 @@
6
6
  # to you under the Apache License, Version 2.0 (the
7
7
  # "License"); you may not use this file except in compliance
8
8
  # with the License. You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing,
13
13
  # software distributed under the License is distributed on an
14
14
  # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
15
  # KIND, either express or implied. See the License for the
16
16
  # specific language governing permissions and limitations
17
17
  # under the License.
18
- #
18
+ #
19
19
  # Contains some contributions under the Thrift Software License.
20
20
  # Please see doc/old-thrift-license.txt in the Thrift distribution for
21
21
  # details.
@@ -27,6 +27,7 @@ require 'thrift/core_ext'
27
27
  require 'thrift/exceptions'
28
28
  require 'thrift/types'
29
29
  require 'thrift/processor'
30
+ require 'thrift/multiplexed_processor'
30
31
  require 'thrift/client'
31
32
  require 'thrift/struct'
32
33
  require 'thrift/union'
@@ -42,12 +43,15 @@ require 'thrift/protocol/binary_protocol'
42
43
  require 'thrift/protocol/binary_protocol_accelerated'
43
44
  require 'thrift/protocol/compact_protocol'
44
45
  require 'thrift/protocol/json_protocol'
46
+ require 'thrift/protocol/multiplexed_protocol'
45
47
 
46
48
  # transport
47
49
  require 'thrift/transport/base_transport'
48
50
  require 'thrift/transport/base_server_transport'
49
51
  require 'thrift/transport/socket'
52
+ require 'thrift/transport/ssl_socket'
50
53
  require 'thrift/transport/server_socket'
54
+ require 'thrift/transport/ssl_server_socket'
51
55
  require 'thrift/transport/unix_socket'
52
56
  require 'thrift/transport/unix_server_socket'
53
57
  require 'thrift/transport/buffered_transport'
@@ -62,6 +66,5 @@ require 'thrift/server/nonblocking_server'
62
66
  require 'thrift/server/simple_server'
63
67
  require 'thrift/server/threaded_server'
64
68
  require 'thrift/server/thread_pool_server'
65
- require 'thrift/server/thin_http_server'
66
69
 
67
70
  require 'thrift/thrift_native'
@@ -1,4 +1,4 @@
1
- #
1
+ #
2
2
  # Licensed to the Apache Software Foundation (ASF) under one
3
3
  # or more contributor license agreements. See the NOTICE file
4
4
  # distributed with this work for additional information
@@ -6,16 +6,16 @@
6
6
  # to you under the Apache License, Version 2.0 (the
7
7
  # "License"); you may not use this file except in compliance
8
8
  # with the License. You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing,
13
13
  # software distributed under the License is distributed on an
14
14
  # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
15
  # KIND, either express or implied. See the License for the
16
16
  # specific language governing permissions and limitations
17
17
  # under the License.
18
- #
18
+ #
19
19
 
20
20
  module Thrift
21
21
  module Client
@@ -27,6 +27,15 @@ module Thrift
27
27
 
28
28
  def send_message(name, args_class, args = {})
29
29
  @oprot.write_message_begin(name, MessageTypes::CALL, @seqid)
30
+ send_message_args(args_class, args)
31
+ end
32
+
33
+ def send_oneway_message(name, args_class, args = {})
34
+ @oprot.write_message_begin(name, MessageTypes::ONEWAY, @seqid)
35
+ send_message_args(args_class, args)
36
+ end
37
+
38
+ def send_message_args(args_class, args)
30
39
  data = args_class.new
31
40
  args.each do |k, v|
32
41
  data.send("#{k.to_s}=", v)
@@ -0,0 +1,76 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+ require 'thrift/protocol/protocol_decorator'
20
+ require 'thrift/protocol/base_protocol'
21
+
22
+ module Thrift
23
+ class MultiplexedProcessor
24
+ def initialize
25
+ @actual_processors = {}
26
+ end
27
+
28
+ def register_processor(service_name, processor)
29
+ @actual_processors[service_name] = processor
30
+ end
31
+
32
+ def process(iprot, oprot)
33
+ name, type, seqid = iprot.read_message_begin
34
+ check_type(type)
35
+ check_separator(name)
36
+ service_name, method = name.split(':')
37
+ processor(service_name).process(StoredMessageProtocol.new(iprot, [method, type, seqid]), oprot)
38
+ end
39
+
40
+ protected
41
+
42
+ def processor(service_name)
43
+ if @actual_processors.has_key?(service_name)
44
+ @actual_processors[service_name]
45
+ else
46
+ raise Thrift::Exception.new("Service name not found: #{service_name}. Did you forget to call #{self.class.name}#register_processor?")
47
+ end
48
+ end
49
+
50
+ def check_type(type)
51
+ unless [MessageTypes::CALL, MessageTypes::ONEWAY].include?(type)
52
+ raise Thrift::Exception.new('This should not have happened!?')
53
+ end
54
+ end
55
+
56
+ def check_separator(name)
57
+ if name.count(':') < 1
58
+ raise Thrift::Exception.new("Service name not found in message name: #{name}. Did you forget to use a Thrift::Protocol::MultiplexedProtocol in your client?")
59
+ end
60
+ end
61
+ end
62
+
63
+ class StoredMessageProtocol < BaseProtocol
64
+
65
+ include ProtocolDecorator
66
+
67
+ def initialize(protocol, message_begin)
68
+ super(protocol)
69
+ @message_begin = message_begin
70
+ end
71
+
72
+ def read_message_begin
73
+ @message_begin
74
+ end
75
+ end
76
+ end