opal-up 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46fd760653d3303f32429a4dfd767c4d93ac56817393785d7da35632ab2d4ad2
4
- data.tar.gz: a809d96c97f31441dd51c8e5c87aeaee47059835718f62de3217b38348d7d111
3
+ metadata.gz: 3bb6a2cde4f3f4cc8415d17f9d6c471dd5a991cf8ef3a588c528370b4330683d
4
+ data.tar.gz: 697d463336883f4259a27804239642fca35915f7991de7cc92260b6adcda44e1
5
5
  SHA512:
6
- metadata.gz: 6cd09583959a4340bafda2c118a570df793884fc2813e2b93a251f26220e243910263093c3ff24ac8f9dcc337af5cf1c152f5c9a491e58a5dcc32d035ef5c545
7
- data.tar.gz: 7e45708e9f770ea45dd463dd5bf39075d7d241fe73d0ea60d638e6d80369dec4ae16661b9187525b522440133fa0272df62ca1c982bb132737807c9e05dae6f3
6
+ metadata.gz: '09e5af566f909d626a00e0b865b5bb7d7e717d7488f7111a5cc6b9fd8ad2b53d2c9e9aa651492ff76e6ef5eb61da63f208d719af2a593b458033b1eec3a90a10'
7
+ data.tar.gz: f96190488e44fac00d338f639b9167e80ac0a48cd9ee108a75474e99d982834514b94f4a01c8769ef399091c6cab2c6e54381e3e1e524215b2a028a8039abf75
data/ext/up_ext/Loop.h CHANGED
@@ -21,8 +21,8 @@
21
21
  /* The loop is lazily created per-thread and run with run() */
22
22
 
23
23
  #include "LoopData.h"
24
+ #include "libusockets.h"
24
25
  #include <iostream>
25
- #include <libusockets.h>
26
26
 
27
27
  namespace uWS {
28
28
  struct Loop {
@@ -18,7 +18,7 @@
18
18
  #ifndef UWS_WEBSOCKETPROTOCOL_H
19
19
  #define UWS_WEBSOCKETPROTOCOL_H
20
20
 
21
- #include <libusockets.h>
21
+ #include "libusockets.h"
22
22
 
23
23
  #include <cstdint>
24
24
  #include <cstdlib>
data/ext/up_ext/up_ext.c CHANGED
@@ -26,6 +26,7 @@ static ID at_instance;
26
26
  static ID at_member_id;
27
27
  static ID at_members;
28
28
  static ID at_open;
29
+ static ID at_port;
29
30
  static ID at_protocol;
30
31
  static ID at_secret;
31
32
  static ID at_server;
@@ -142,9 +143,17 @@ static void up_internal_req_header_handler(const char *h, size_t h_len,
142
143
  }
143
144
 
144
145
  header_key[h_len + 5] = '\0';
145
- rb_hash_aset((VALUE)renv,
146
- rb_enc_str_new(header_key, h_len + 5, binary_encoding),
147
- rb_enc_str_new(v, v_len, binary_encoding));
146
+ if (header_key[5] == 'C' &&
147
+ ((strncmp(header_key + 5, "CONTENT_TYPE", 12) == 0) ||
148
+ (strncmp(header_key + 5, "CONTENT_LENGTH", 14) == 0))) {
149
+ rb_hash_aset((VALUE)renv,
150
+ rb_enc_str_new(header_key + 5, h_len, binary_encoding),
151
+ rb_enc_str_new(v, v_len, binary_encoding));
152
+ } else {
153
+ rb_hash_aset((VALUE)renv,
154
+ rb_enc_str_new(header_key, h_len + 5, binary_encoding),
155
+ rb_enc_str_new(v, v_len, binary_encoding));
156
+ }
148
157
  }
149
158
 
150
159
  static void up_server_prepare_env(VALUE renv, uws_req_t *req) {
@@ -629,6 +638,8 @@ static VALUE up_server_init(int argc, VALUE *argv, VALUE self) {
629
638
  s->port = rport;
630
639
  s->logger = rargs[3];
631
640
 
641
+ rb_ivar_set(self, at_port, s->port);
642
+
632
643
  return self;
633
644
  }
634
645
 
@@ -918,15 +929,6 @@ void up_setup_rack_env_template(void) {
918
929
  // A common object interface for logging messages
919
930
  up_hash_set(rack_env_template, "rack.logger", default_logger);
920
931
 
921
- // An Integer hint to the multipart parser as to what chunk size to use for
922
- // reads and writes.
923
- up_hash_set(rack_env_template, "rack.multipart.buffer_size", INT2FIX(4096));
924
-
925
- // An object responding to #call with two arguments, the filename and
926
- // content_type given for the multipart form field, and returning an IO-like
927
- // object that responds to #<< and optionally #rewind.
928
- // up_hash_set(rack_env_template, "rack.multipart.tempfile_factory", Qnil);
929
-
930
932
  // An array of callables run by the server after the response has been
931
933
  // processed.
932
934
  // up_hash_set(rack_env_template, "rack.response_finished", Qnil);
@@ -969,6 +971,7 @@ void Init_up_ext(void) {
969
971
  at_member_id = rb_intern("@member_id");
970
972
  at_members = rb_intern("@members");
971
973
  at_open = rb_intern("@open");
974
+ at_port = rb_intern("@port");
972
975
  at_protocol = rb_intern("@protocol");
973
976
  at_secret = rb_intern("@secret");
974
977
  at_server = rb_intern("@server");
data/lib/up/bun/server.rb CHANGED
@@ -27,7 +27,6 @@ module Up
27
27
  @default_input = StringIO.new('', 'r')
28
28
  @server = nil
29
29
  @logger = logger
30
- @t_factory = proc { |filename, _content_type| File.new(filename, 'a+') }
31
30
  end
32
31
 
33
32
  %x{
@@ -78,8 +77,6 @@ module Up
78
77
  env.set('rack.input', #@default_input);
79
78
  }
80
79
  env.set('rack.logger', #@logger);
81
- env.set('rack.multipart.buffer_size', 4096);
82
- env.set('rack.multipart.tempfile_factory', #@t_factory);
83
80
  if (upgrade) {
84
81
  env.set('rack.upgrade?', #{:websocket});
85
82
  }
@@ -92,7 +89,14 @@ module Up
92
89
  env.set('QUERY_STRING', "");
93
90
  env.set('REQUEST_METHOD', req.method);
94
91
  env.set('PATH_INFO', req.url);
95
- req.headers.forEach((k, v) => { env.set('HTTP_' + k.toUpperCase().replaceAll('-', '_'), v) });
92
+ req.headers.forEach((k, v) => {
93
+ let h = k.toUpperCase().replaceAll('-', '_');
94
+ if (h[0] === 'C' && (h === 'CONTENT_TYPE || h === 'CONTENT_LENGTH')) {
95
+ env.set(h, v) ;
96
+ } else {
97
+ env.set('HTTP_' + h, v) ;
98
+ }
99
+ });
96
100
  const rack_res = #@app.$call(env);
97
101
  if (upgrade) {
98
102
  const handler = env.get('rack.upgrade');
@@ -1,6 +1,7 @@
1
1
  # backtick_javascript: true
2
2
  require 'etc'
3
3
  require 'random/formatter'
4
+ require 'socket'
4
5
  require 'up_ext'
5
6
 
6
7
  module Up
@@ -38,8 +39,10 @@ module Up
38
39
 
39
40
  def install_signal_handlers
40
41
  Signal.trap('CHLD') do
41
- warn "\nError: a cluster member died!"
42
- kill_members
42
+ unless members_alive?
43
+ warn "\nError: a cluster worker died!"
44
+ kill_members
45
+ end
43
46
  end
44
47
  Signal.trap('INT') do
45
48
  warn "\nReceived CTRL-C!"
@@ -49,7 +52,7 @@ module Up
49
52
 
50
53
  def kill_members
51
54
  Signal.trap('CHLD', 'IGNORE')
52
- STDERR.print "Stopping workers: "
55
+ STDERR.print "Stopping all workers: "
53
56
  @members.each do |mid|
54
57
  Process.kill('INT', mid) rescue nil
55
58
  STDERR.print '.'
@@ -58,6 +61,15 @@ module Up
58
61
  warn "\nCluster stopped."
59
62
  Signal.trap('CHLD', 'DEFAULT')
60
63
  end
64
+
65
+ def members_alive?
66
+ @workers.times do |i|
67
+ TCPSocket.new('localhost', @port + i + 1).close
68
+ end
69
+ true
70
+ rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL
71
+ false
72
+ end
61
73
  end
62
74
  end
63
75
  end
@@ -33,7 +33,6 @@ module Up
33
33
  @default_input = StringIO.new('', 'r')
34
34
  @server = nil
35
35
  @logger = logger
36
- @t_factory = proc { |filename, _content_type| File.new(filename, 'a+') }
37
36
  end
38
37
 
39
38
  %x{
@@ -64,8 +63,6 @@ module Up
64
63
  env.set('rack.errors',#{STDERR});
65
64
  env.set('rack.input', ins.default_input);
66
65
  env.set('rack.logger', ins.logger);
67
- env.set('rack.multipart.buffer_size', 4096);
68
- env.set('rack.multipart.tempfile_factory', ins.t_factory);
69
66
  env.set('rack.url_scheme', ins.scheme);
70
67
  env.set('SCRIPT_NAME', "");
71
68
  env.set('SERVER_PROTOCOL', 'HTTP/1.1');
@@ -75,7 +72,14 @@ module Up
75
72
  env.set('QUERY_STRING', req.getQuery() || '');
76
73
  env.set('REQUEST_METHOD', req.getMethod().toUpperCase());
77
74
  env.set('PATH_INFO', req.getUrl());
78
- req.forEach((k, v) => { env.set('HTTP_' + k.toUpperCase().replaceAll('-', '_'), v) });
75
+ req.forEach((k, v) => {
76
+ let h = k.toUpperCase().replaceAll('-', '_');
77
+ if (h[0] === 'C' && (h === 'CONTENT_TYPE || h === 'CONTENT_LENGTH')) {
78
+ env.set(h, v) ;
79
+ } else {
80
+ env.set('HTTP_' + h, v) ;
81
+ }
82
+ });
79
83
  return env;
80
84
  }
81
85
  }
data/lib/up/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Up
2
- VERSION = '0.0.7'.freeze
2
+ VERSION = '0.0.9'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-up
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
@@ -162,7 +162,6 @@ files:
162
162
  - ext/up_ext/loop_data.h
163
163
  - ext/up_ext/socket.c
164
164
  - ext/up_ext/up_ext.c
165
- - lib/up/bun/rack_env.rb
166
165
  - lib/up/bun/rack_server.rb
167
166
  - lib/up/bun/server.rb
168
167
  - lib/up/bun/server_cli.rb
@@ -1,92 +0,0 @@
1
- # backtick_javascript: true
2
-
3
- require 'logger'
4
- require 'up/version'
5
-
6
- module Up
7
- module Bun
8
- class RackEnv < ::Hash
9
- RACK_VARS = %w[rack.errors rack.hijack rack.hijack? rack.input rack.logger
10
- rack.multipart.buffer_size rack.multipart.tempfile_factory
11
- rack.response_finished
12
- rack.session rack.upgrade rack.upgrade? rack.url_scheme
13
- HTTP_ACCEPT HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
14
- HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT PATH_INFO QUERY_STRING REQUEST_METHOD
15
- SCRIPT_NAME SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE]
16
- def initialize(req, config)
17
- @req = req
18
- @config = config
19
- end
20
-
21
- def [](key)
22
- return super(key) if key?(key)
23
- self[key] = case key
24
- when 'rack.errors'
25
- STDERR
26
- when 'rack.logger'
27
- @config[:logger]
28
- when 'rack.multipart.buffer_size'
29
- 4096
30
- when 'rack.multipart.tempfile_factory'
31
- proc { |_filename, _content_type| File.new }
32
- when 'rack.session'
33
- {}
34
- when 'rack.url_scheme'
35
- @config[:scheme]
36
- when 'PATH_INFO'
37
- `#@req.url`
38
- when 'QUERY_STRING'
39
- ""
40
- when 'RACK_ERRORS'
41
- self['rack.errors']
42
- when 'RACK_LOGGER'
43
- self['rack.logger']
44
- when 'REQUEST_METHOD'
45
- `#@req.method`
46
- when 'SCRIPT_NAME'
47
- ""
48
- when 'SERVER_NAME'
49
- @config[:host]
50
- when 'SERVER_PORT'
51
- @config[:port].to_s
52
- when 'SERVER_PROTOCOL'
53
- ""
54
- when 'SERVER_SOFTWARE'
55
- "#{@config[:handler]}/#{Up::VERSION} #{@config[:engine]}"
56
- else
57
- if key.start_with?('HTTP_')
58
- key = key[5..].gsub(/_/, '-')
59
- `#@req.headers.get(key.toLowerCase())`
60
- else
61
- nil
62
- end
63
- end
64
- end
65
-
66
- def req_headers
67
- h = {}
68
- %x{
69
- var hdr, hds = #@req.headers;
70
- for (hdr of hds) { h.set(hdr[0], hdr[1]); }
71
- }
72
- h
73
- end
74
-
75
- def each
76
- unless @got_them_all
77
- RACK_VARS.each { |k| self[k] unless self.key?(k) }
78
- @got_them_all = true
79
- end
80
- super
81
- end
82
-
83
- def to_s
84
- unless @got_them_all
85
- RACK_VARS.each { |k| self[k] unless self.key?(k) }
86
- @got_them_all = true
87
- end
88
- super
89
- end
90
- end
91
- end
92
- end