jubilee 2.1.0.rc1-java → 3.0.0.beta2-java
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/.ruby-version +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -14
- data/Guardfile +24 -0
- data/README.md +34 -66
- data/Rakefile +1 -1
- data/examples/chatapp/Gemfile +2 -1
- data/examples/chatapp/Gemfile.lock +2 -2
- data/examples/chatapp/README.md +2 -14
- data/examples/chatapp/app.rb +19 -11
- data/examples/chatapp/public/assets/javascripts/application.js +1 -1
- data/examples/chatapp/public/assets/javascripts/vertxbus.js +60 -48
- data/examples/client/vertxbus.js +60 -48
- data/examples/shims_example/log/development.log +0 -0
- data/jars/hazelcast-3.5.2.jar +0 -0
- data/jars/jackson-annotations-2.6.0.jar +0 -0
- data/jars/jackson-core-2.6.1.jar +0 -0
- data/jars/jackson-databind-2.6.1.jar +0 -0
- data/jars/netty-buffer-4.0.33.Final.jar +0 -0
- data/jars/netty-codec-4.0.33.Final.jar +0 -0
- data/jars/netty-codec-http-4.0.33.Final.jar +0 -0
- data/jars/netty-common-4.0.33.Final.jar +0 -0
- data/jars/netty-handler-4.0.33.Final.jar +0 -0
- data/jars/netty-transport-4.0.33.Final.jar +0 -0
- data/jars/vertx-auth-common-3.2.1.jar +0 -0
- data/jars/vertx-core-3.2.1.jar +0 -0
- data/jars/vertx-hazelcast-3.2.1.jar +0 -0
- data/jars/vertx-lang-ruby-3.2.1.jar +0 -0
- data/jars/vertx-web-3.2.1.jar +0 -0
- data/jubilee.gemspec +40 -42
- data/lib/jubilee.rb +7 -2
- data/lib/jubilee/cli.rb +4 -4
- data/lib/jubilee/jubilee.jar +0 -0
- data/lib/jubilee/response.rb +1 -1
- data/lib/jubilee/version.rb +3 -3
- data/pom.xml +10 -94
- data/spec/apps/rails4/basic/Gemfile +2 -2
- data/spec/apps/rails4/basic/Gemfile.lock +5 -6
- data/src/main/java/org/jruby/jubilee/Const.java +1 -4
- data/src/main/java/org/jruby/jubilee/JubileeVerticle.java +41 -46
- data/src/main/java/org/jruby/jubilee/RackApplication.java +37 -57
- data/src/main/java/org/jruby/jubilee/RackEnvironment.java +38 -35
- data/src/main/java/org/jruby/jubilee/RackEnvironmentHash.java +1 -7
- data/src/main/java/org/jruby/jubilee/RubyHttpServerResponse.java +12 -6
- data/src/main/java/org/jruby/jubilee/RubyNetSocket.java +9 -12
- data/src/main/java/org/jruby/jubilee/RubyPlatformManager.java +39 -43
- data/src/main/java/org/jruby/jubilee/impl/RubyIORackInput.java +2 -1
- data/src/main/java/org/jruby/jubilee/vertx/JubileeVertx.java +1 -1
- metadata +30 -54
- data/examples/chatapp/config.json +0 -4
- data/jars/annotations-1.3.2.jar +0 -0
- data/jars/hazelcast-3.2.3.jar +0 -0
- data/jars/jackson-annotations-2.2.2.jar +0 -0
- data/jars/jackson-core-2.2.2.jar +0 -0
- data/jars/jackson-databind-2.2.2.jar +0 -0
- data/jars/lang-jruby-2.1.0-final.jar +0 -0
- data/jars/log4j-1.2.16.jar +0 -0
- data/jars/netty-all-4.0.20.Final.jar +0 -0
- data/jars/slf4j-api-1.6.2.jar +0 -0
- data/jars/vertx-core-2.1.2.jar +0 -0
- data/jars/vertx-hazelcast-2.1.2.jar +0 -0
- data/jars/vertx-platform-2.1.2.jar +0 -0
- data/lib/container.rb +0 -117
- data/lib/core/buffer.rb +0 -251
- data/lib/core/datagram.rb +0 -280
- data/lib/core/dns.rb +0 -143
- data/lib/core/event_bus.rb +0 -277
- data/lib/core/file_system.rb +0 -479
- data/lib/core/http.rb +0 -1307
- data/lib/core/net.rb +0 -251
- data/lib/core/network_support.rb +0 -77
- data/lib/core/parsetools.rb +0 -105
- data/lib/core/shared_data.rb +0 -214
- data/lib/core/sock_js.rb +0 -116
- data/lib/core/ssl_support.rb +0 -163
- data/lib/core/streams.rb +0 -183
- data/lib/core/tcp_support.rb +0 -136
- data/lib/core/timers.rb +0 -73
- data/lib/core/vertx_require.rb +0 -25
- data/lib/core/wrapped_handler.rb +0 -28
- data/lib/jubilee/jubilee_require.rb +0 -24
- data/lib/test_utils.rb +0 -66
- data/lib/vertx.rb +0 -30
- data/lib/vertx_tests.rb +0 -8
- data/src/main/assembly/mod.xml +0 -21
- data/src/main/java/org/jruby/jubilee/JubileeVerticleFactory.java +0 -258
- data/src/main/java/org/jruby/jubilee/RubyCallable.java +0 -52
- data/src/main/resources/META-INF/services/org.vertx.java.deploy.impl.jruby.JubileeVerticleFactory +0 -1
- data/src/main/resources/mod.json +0 -11
- data/vertx_classpath.txt +0 -12
@@ -1,5 +1,5 @@
|
|
1
1
|
GEM
|
2
|
-
remote:
|
2
|
+
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
4
|
actionmailer (4.0.1)
|
5
5
|
actionpack (= 4.0.1)
|
@@ -28,7 +28,6 @@ GEM
|
|
28
28
|
thread_safe (~> 0.1)
|
29
29
|
tzinfo (~> 0.3.37)
|
30
30
|
arel (4.0.1)
|
31
|
-
atomic (1.1.14)
|
32
31
|
atomic (1.1.14-java)
|
33
32
|
builder (3.1.4)
|
34
33
|
coffee-rails (4.0.1)
|
@@ -49,7 +48,6 @@ GEM
|
|
49
48
|
jquery-rails (3.0.4)
|
50
49
|
railties (>= 3.0, < 5.0)
|
51
50
|
thor (>= 0.14, < 2.0)
|
52
|
-
json (1.8.1)
|
53
51
|
json (1.8.1-java)
|
54
52
|
mail (2.5.4)
|
55
53
|
mime-types (~> 1.16)
|
@@ -93,8 +91,6 @@ GEM
|
|
93
91
|
therubyrhino_jar (>= 1.7.3)
|
94
92
|
therubyrhino_jar (1.7.4)
|
95
93
|
thor (0.18.1)
|
96
|
-
thread_safe (0.1.3)
|
97
|
-
atomic
|
98
94
|
thread_safe (0.1.3-java)
|
99
95
|
atomic
|
100
96
|
tilt (1.4.1)
|
@@ -117,8 +113,11 @@ DEPENDENCIES
|
|
117
113
|
jbuilder (~> 1.2)
|
118
114
|
jdbc-sqlite3
|
119
115
|
jquery-rails (>= 3.0)
|
120
|
-
rails
|
116
|
+
rails
|
121
117
|
sass-rails (~> 4.0.0)
|
122
118
|
therubyrhino
|
123
119
|
turbolinks
|
124
120
|
uglifier (>= 1.3.0)
|
121
|
+
|
122
|
+
BUNDLED WITH
|
123
|
+
1.10.5
|
@@ -8,9 +8,7 @@ package org.jruby.jubilee;
|
|
8
8
|
*/
|
9
9
|
public final class Const {
|
10
10
|
|
11
|
-
public static final String JUBILEE_VERSION = "Jubilee(
|
12
|
-
public static final String HTTP_11 = "HTTP/1.1";
|
13
|
-
public static final String HTTP_10 = "HTTP/1.0";
|
11
|
+
public static final String JUBILEE_VERSION = "Jubilee(3.0.0)";
|
14
12
|
|
15
13
|
public static final String LOCALHOST = "localhost";
|
16
14
|
public static final String PORT_80 = "80";
|
@@ -27,6 +25,5 @@ public final class Const {
|
|
27
25
|
}
|
28
26
|
|
29
27
|
// Internal
|
30
|
-
public static final String END_OF_BODY = "__EOF__";
|
31
28
|
public static final byte EOL = '\n';
|
32
29
|
}
|
@@ -1,17 +1,18 @@
|
|
1
1
|
package org.jruby.jubilee;
|
2
2
|
|
3
|
+
import io.vertx.core.*;
|
4
|
+
import io.vertx.core.http.HttpServerOptions;
|
5
|
+
import io.vertx.core.json.JsonArray;
|
6
|
+
import io.vertx.core.json.JsonObject;
|
7
|
+
import io.vertx.core.net.JksOptions;
|
8
|
+
import io.vertx.ext.web.Router;
|
9
|
+
import io.vertx.ext.web.handler.sockjs.BridgeOptions;
|
10
|
+
import io.vertx.ext.web.handler.sockjs.PermittedOptions;
|
11
|
+
import io.vertx.ext.web.handler.sockjs.SockJSHandler;
|
3
12
|
import org.jruby.Ruby;
|
4
13
|
import org.jruby.RubyArray;
|
5
14
|
import org.jruby.RubyInstanceConfig;
|
6
15
|
import org.jruby.runtime.builtin.IRubyObject;
|
7
|
-
import org.vertx.java.core.Handler;
|
8
|
-
import org.vertx.java.core.http.HttpServer;
|
9
|
-
import org.vertx.java.core.http.HttpServerRequest;
|
10
|
-
import org.vertx.java.core.json.JsonArray;
|
11
|
-
import org.vertx.java.core.json.JsonObject;
|
12
|
-
import org.vertx.java.platform.Verticle;
|
13
|
-
import org.vertx.java.platform.impl.JRubyVerticleFactory;
|
14
|
-
import org.vertx.java.platform.impl.WrappedVertx;
|
15
16
|
|
16
17
|
import java.io.IOException;
|
17
18
|
import java.util.ArrayList;
|
@@ -21,21 +22,17 @@ import java.util.List;
|
|
21
22
|
/**
|
22
23
|
* Created by isaiah on 23/01/2014.
|
23
24
|
*/
|
24
|
-
public class JubileeVerticle extends
|
25
|
-
private String rackup;
|
26
|
-
|
27
|
-
public JubileeVerticle(){}
|
28
|
-
|
29
|
-
public JubileeVerticle(String rackup) {
|
30
|
-
this.rackup = rackup;
|
31
|
-
}
|
25
|
+
public class JubileeVerticle extends AbstractVerticle {
|
32
26
|
|
33
27
|
@Override
|
34
|
-
public void start() {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
public void start() throws Exception {
|
29
|
+
JsonObject config = config();
|
30
|
+
HttpServerOptions httpServerOptions = new HttpServerOptions();
|
31
|
+
httpServerOptions.setPort(config.getInteger("port"));
|
32
|
+
httpServerOptions.setHost(config.getString("host"));
|
33
|
+
httpServerOptions.setAcceptBacklog(10000);
|
34
|
+
httpServerOptions.setClientAuthRequired(false);
|
35
|
+
|
39
36
|
String root = config.getString("root", ".");
|
40
37
|
this.runtime = createRuntime(root, config);
|
41
38
|
String expandedRoot = this.runtime.evalScriptlet("File.expand_path(%q(" + root + "))").asJavaString();
|
@@ -43,31 +40,34 @@ public class JubileeVerticle extends Verticle {
|
|
43
40
|
IRubyObject rackApplication = initRackApplication(config);
|
44
41
|
final RackApplication app;
|
45
42
|
boolean ssl = config.getBoolean("ssl");
|
43
|
+
if (ssl) {
|
44
|
+
httpServerOptions.setSsl(true).setKeyStoreOptions(
|
45
|
+
new JksOptions().setPath(config.getString("keystore_path"))
|
46
|
+
.setPassword(config.getString("keystore_password"))
|
47
|
+
);
|
48
|
+
}
|
49
|
+
Router router = Router.router(vertx);
|
46
50
|
try {
|
47
|
-
app = new RackApplication(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
if (config.containsField("event_bus")) {
|
55
|
-
JsonArray allowAll = new JsonArray();
|
56
|
-
allowAll.add(new JsonObject());
|
57
|
-
JsonObject ebconf = new JsonObject();
|
58
|
-
ebconf.putString("prefix", config.getString("event_bus"));
|
59
|
-
vertx.createSockJSServer(httpServer).bridge(ebconf, allowAll, allowAll);
|
51
|
+
app = new RackApplication(vertx, runtime.getCurrentContext(), rackApplication, config);
|
52
|
+
if (config.containsKey("event_bus")) {
|
53
|
+
BridgeOptions options = new BridgeOptions().addOutboundPermitted(new PermittedOptions().setAddressRegex(".+"));
|
54
|
+
options.addInboundPermitted(new PermittedOptions().setAddressRegex(".+"));
|
55
|
+
router.route("/" + config.getString("event_bus") + "/*").handler(SockJSHandler.create(vertx).bridge(options, event -> {
|
56
|
+
event.complete(true);
|
57
|
+
}));
|
60
58
|
}
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
router.route("/*").handler(ctx -> {
|
60
|
+
app.call(ctx.request());
|
61
|
+
});
|
64
62
|
} catch (IOException e) {
|
65
|
-
|
63
|
+
runtime.getErrorStream().println("Failed to create RackApplication");
|
66
64
|
}
|
65
|
+
|
66
|
+
vertx.createHttpServer(httpServerOptions).requestHandler(router::accept).listen();
|
67
67
|
}
|
68
68
|
|
69
69
|
@Override
|
70
|
-
public void stop() {
|
70
|
+
public void stop(Future<Void> future) throws Exception {
|
71
71
|
this.runtime.tearDown();
|
72
72
|
}
|
73
73
|
|
@@ -77,17 +77,13 @@ public class JubileeVerticle extends Verticle {
|
|
77
77
|
|
78
78
|
private Ruby createRuntime(String root, JsonObject options) {
|
79
79
|
Ruby runtime;
|
80
|
-
// if (Ruby.isGlobalRuntimeReady()) {
|
81
|
-
// runtime = Ruby.getGlobalRuntime();
|
82
|
-
// } else {
|
83
80
|
RubyInstanceConfig instanceConfig = new RubyInstanceConfig();
|
84
81
|
String jrubyHome = options.getString("jruby-home", "");
|
85
82
|
if (!jrubyHome.isEmpty()) {
|
86
83
|
instanceConfig.setJRubyHome(jrubyHome);
|
87
84
|
}
|
88
|
-
Object[] argv = options.
|
85
|
+
Object[] argv = options.getJsonArray("argv", new JsonArray()).getList().toArray();
|
89
86
|
instanceConfig.setArgv(Arrays.copyOf(argv, argv.length, String[].class));
|
90
|
-
// }
|
91
87
|
RubyArray globalLoadPaths = (RubyArray) Ruby.getGlobalRuntime().getLoadService().getLoadPath();
|
92
88
|
List<String> loadPaths = new ArrayList<>();
|
93
89
|
for (int i = 0; i < globalLoadPaths.size(); i++) {
|
@@ -102,8 +98,7 @@ public class JubileeVerticle extends Verticle {
|
|
102
98
|
}
|
103
99
|
|
104
100
|
private IRubyObject initRackApplication(JsonObject config) {
|
105
|
-
|
106
|
-
this.rackup = config.getString("rackup");
|
101
|
+
String rackup = config.getString("rackup");
|
107
102
|
String rackScript = "require 'rack'\n" +
|
108
103
|
"require 'jubilee'\n" +
|
109
104
|
"app, _ = Rack::Builder.parse_file('" + rackup + "')\n";
|
@@ -2,21 +2,15 @@ package org.jruby.jubilee;
|
|
2
2
|
|
3
3
|
import io.netty.buffer.ByteBuf;
|
4
4
|
import io.netty.buffer.Unpooled;
|
5
|
+
import io.vertx.core.Vertx;
|
6
|
+
import io.vertx.core.http.HttpServerRequest;
|
7
|
+
import io.vertx.core.json.JsonObject;
|
5
8
|
import org.jruby.Ruby;
|
6
|
-
import org.jruby.RubyArray;
|
7
9
|
import org.jruby.RubyClass;
|
8
|
-
import org.jruby.RubyFixnum;
|
9
10
|
import org.jruby.javasupport.JavaEmbedUtils;
|
10
11
|
import org.jruby.jubilee.impl.RubyIORackInput;
|
11
|
-
import org.jruby.jubilee.impl.RubyNullIO;
|
12
12
|
import org.jruby.runtime.ThreadContext;
|
13
13
|
import org.jruby.runtime.builtin.IRubyObject;
|
14
|
-
import org.vertx.java.core.Handler;
|
15
|
-
import org.vertx.java.core.VoidHandler;
|
16
|
-
import org.vertx.java.core.buffer.Buffer;
|
17
|
-
import org.vertx.java.core.http.HttpServerRequest;
|
18
|
-
import org.vertx.java.core.json.JsonObject;
|
19
|
-
import org.vertx.java.platform.impl.WrappedVertx;
|
20
14
|
|
21
15
|
import java.io.IOException;
|
22
16
|
import java.io.PrintWriter;
|
@@ -34,14 +28,14 @@ public class RackApplication {
|
|
34
28
|
private boolean ssl;
|
35
29
|
private boolean hideErrorStack;
|
36
30
|
private Ruby runtime;
|
37
|
-
private
|
31
|
+
private Vertx vertx;
|
38
32
|
private RubyClass rackIOInputClass;
|
39
33
|
private RubyClass httpServerResponseClass;
|
40
34
|
private RackEnvironment rackEnv;
|
41
35
|
|
42
|
-
public RackApplication(
|
36
|
+
public RackApplication(Vertx vertx, ThreadContext context, IRubyObject app, JsonObject config) throws IOException {
|
43
37
|
this.app = app;
|
44
|
-
this.ssl = config.getBoolean("ssl"
|
38
|
+
this.ssl = config.getBoolean("ssl");
|
45
39
|
this.hideErrorStack = config.getBoolean("hide_error_stack", false);
|
46
40
|
this.vertx = vertx;
|
47
41
|
this.runtime = context.runtime;
|
@@ -64,60 +58,46 @@ public class RackApplication {
|
|
64
58
|
final AtomicBoolean eof = new AtomicBoolean(false);
|
65
59
|
input = new RubyIORackInput(runtime, rackIOInputClass, request, bodyBuf, eof);
|
66
60
|
|
67
|
-
request.
|
68
|
-
|
69
|
-
public void handle(Buffer buffer) {
|
70
|
-
bodyBuf.writeBytes(buffer.getByteBuf());
|
71
|
-
}
|
61
|
+
request.handler(buffer -> {
|
62
|
+
bodyBuf.writeBytes(buffer.getByteBuf());
|
72
63
|
});
|
73
64
|
|
74
|
-
request.endHandler(
|
75
|
-
|
76
|
-
protected void handle() {
|
77
|
-
eof.set(true);
|
78
|
-
}
|
65
|
+
request.endHandler(v -> {
|
66
|
+
eof.set(true);
|
79
67
|
});
|
80
|
-
request.exceptionHandler(
|
81
|
-
|
82
|
-
public void handle(Throwable ignore) {
|
83
|
-
eof.set(true);
|
84
|
-
}
|
68
|
+
request.exceptionHandler(ignore -> {
|
69
|
+
eof.set(true);
|
85
70
|
});
|
86
71
|
// } else {
|
87
72
|
// input = nullio;
|
88
73
|
// }
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
request.response().end("Internal error.");
|
113
|
-
} else {
|
114
|
-
request.response().end(message + stringWriter.toString());
|
115
|
-
}
|
116
|
-
e.printStackTrace(runtime.getErrorStream());
|
74
|
+
vertx.executeBlocking((future) -> {
|
75
|
+
try {
|
76
|
+
// This is a different context, do NOT replace runtime.getCurrentContext()
|
77
|
+
IRubyObject result = app.callMethod(runtime.getCurrentContext(), "call", rackEnv.getEnv(request, input, ssl));
|
78
|
+
// if (request.isHijacked()) {
|
79
|
+
// // It's the hijacker's response to close the socket.
|
80
|
+
// return;
|
81
|
+
// }
|
82
|
+
RackResponse response = (RackResponse) JavaEmbedUtils.rubyToJava(runtime, result, RackResponse.class);
|
83
|
+
RubyHttpServerResponse resp = new RubyHttpServerResponse(runtime,
|
84
|
+
httpServerResponseClass, request);
|
85
|
+
response.respond(resp);
|
86
|
+
future.complete();
|
87
|
+
} catch (Exception e) {
|
88
|
+
request.response().setStatusCode(500);
|
89
|
+
String message = "Jubilee caught this error: " + e.getMessage() + "\n";
|
90
|
+
StringWriter stringWriter = new StringWriter();
|
91
|
+
PrintWriter printWriter = new PrintWriter(stringWriter);
|
92
|
+
e.printStackTrace(printWriter);
|
93
|
+
if (hideErrorStack) {
|
94
|
+
request.response().end("Internal error.");
|
95
|
+
} else {
|
96
|
+
request.response().end(message + stringWriter.toString());
|
117
97
|
}
|
98
|
+
e.printStackTrace(runtime.getErrorStream());
|
118
99
|
}
|
119
|
-
};
|
120
|
-
vertx.startInBackground(task, false);
|
100
|
+
}, false, (ar) -> {});
|
121
101
|
}
|
122
102
|
|
123
103
|
}
|
@@ -1,17 +1,16 @@
|
|
1
1
|
package org.jruby.jubilee;
|
2
2
|
|
3
3
|
import io.netty.handler.codec.http.HttpHeaders;
|
4
|
+
import io.vertx.core.MultiMap;
|
5
|
+
import io.vertx.core.http.HttpServerRequest;
|
6
|
+
import io.vertx.core.http.HttpVersion;
|
7
|
+
import io.vertx.core.net.SocketAddress;
|
4
8
|
import org.jruby.*;
|
5
9
|
import org.jruby.jubilee.utils.RubyHelper;
|
6
10
|
import org.jruby.runtime.*;
|
7
11
|
import org.jruby.runtime.builtin.IRubyObject;
|
8
|
-
import org.vertx.java.core.MultiMap;
|
9
|
-
import org.vertx.java.core.http.HttpServerRequest;
|
10
|
-
import org.vertx.java.core.http.HttpVersion;
|
11
|
-
import org.vertx.java.core.net.NetSocket;
|
12
12
|
|
13
13
|
import java.io.IOException;
|
14
|
-
import java.net.InetSocketAddress;
|
15
14
|
import java.util.HashMap;
|
16
15
|
import java.util.Map;
|
17
16
|
|
@@ -81,15 +80,19 @@ public class RackEnvironment {
|
|
81
80
|
|
82
81
|
String scriptName = "";
|
83
82
|
String[] hostInfo = getHostInfo(request.headers().get(Const.HOST));
|
83
|
+
String httpVersion = "1.1";
|
84
|
+
if (request.version() == HttpVersion.HTTP_1_0) {
|
85
|
+
httpVersion = "1.0";
|
86
|
+
}
|
84
87
|
|
85
|
-
env.lazyPut(RACK_KEY.REQUEST_METHOD, request.method(), true);
|
88
|
+
env.lazyPut(RACK_KEY.REQUEST_METHOD, request.method().toString(), true);
|
86
89
|
env.lazyPut(RACK_KEY.SCRIPT_NAME, scriptName, false);
|
87
90
|
env.lazyPut(RACK_KEY.PATH_INFO, pathInfo, false);
|
88
91
|
env.lazyPut(RACK_KEY.QUERY_STRING, orEmpty(request.query()), false);
|
89
92
|
env.lazyPut(RACK_KEY.SERVER_NAME, hostInfo[0], false);
|
90
93
|
env.lazyPut(RACK_KEY.SERVER_PORT, hostInfo[1], true);
|
91
94
|
env.lazyPut(RACK_KEY.HTTP_VERSION,
|
92
|
-
|
95
|
+
httpVersion, true);
|
93
96
|
env.lazyPut(RACK_KEY.CONTENT_TYPE, headers.get(HttpHeaders.Names.CONTENT_TYPE), true);
|
94
97
|
env.lazyPut(RACK_KEY.REQUEST_URI, request.uri(), false);
|
95
98
|
env.lazyPut(RACK_KEY.REMOTE_ADDR, getRemoteAddr(request), true);
|
@@ -99,9 +102,9 @@ public class RackEnvironment {
|
|
99
102
|
env.lazyPut(RACK_KEY.MULTIPROCESS, runtime.getFalse(), false);
|
100
103
|
env.lazyPut(RACK_KEY.RUN_ONCE, runtime.getFalse(), false);
|
101
104
|
|
102
|
-
// Hijack handling
|
105
|
+
// Hijack handling (disabled)
|
103
106
|
env.lazyPut(RACK_KEY.HIJACK_P, runtime.getFalse(), false);
|
104
|
-
//
|
107
|
+
//env.lazyPut(RACK_KEY.HIJACK, hijackProc(env, request), false);
|
105
108
|
|
106
109
|
|
107
110
|
final int contentLength = getContentLength(headers);
|
@@ -116,30 +119,30 @@ public class RackEnvironment {
|
|
116
119
|
return env;
|
117
120
|
}
|
118
121
|
|
119
|
-
private IRubyObject hijackProc(final RackEnvironmentHash env, final HttpServerRequest req) {
|
120
|
-
CompiledBlockCallback19 callback = new CompiledBlockCallback19() {
|
121
|
-
@Override
|
122
|
-
public IRubyObject call(ThreadContext context, IRubyObject self, IRubyObject[] args, Block block) {
|
123
|
-
RubyNetSocket rubyNetSocket = new RubyNetSocket(context.runtime, netSocketClass, req.netSocket());
|
124
|
-
env.put("rack.hijack_io", rubyNetSocket);
|
125
|
-
return rubyNetSocket;
|
126
|
-
}
|
127
|
-
|
128
|
-
@Override
|
129
|
-
public String getFile() {
|
130
|
-
return null;
|
131
|
-
}
|
132
|
-
|
133
|
-
@Override
|
134
|
-
public int getLine() {
|
135
|
-
return 0;
|
136
|
-
}
|
137
|
-
};
|
138
|
-
BlockBody body = CompiledBlockLight19.newCompiledBlockLight(Arity.NO_ARGUMENTS, runtime.getStaticScopeFactory().getDummyScope(), callback, false, 0, new String[]{});
|
139
|
-
Block b = new Block(body, runtime.newBinding().getBinding());
|
140
|
-
|
141
|
-
return RubyProc.newProc(runtime, b, Block.Type.LAMBDA);
|
142
|
-
}
|
122
|
+
// private IRubyObject hijackProc(final RackEnvironmentHash env, final HttpServerRequest req) {
|
123
|
+
// CompiledBlockCallback19 callback = new CompiledBlockCallback19() {
|
124
|
+
// @Override
|
125
|
+
// public IRubyObject call(ThreadContext context, IRubyObject self, IRubyObject[] args, Block block) {
|
126
|
+
// RubyNetSocket rubyNetSocket = new RubyNetSocket(context.runtime, netSocketClass, req.netSocket());
|
127
|
+
// env.put("rack.hijack_io", rubyNetSocket);
|
128
|
+
// return rubyNetSocket;
|
129
|
+
// }
|
130
|
+
//
|
131
|
+
// @Override
|
132
|
+
// public String getFile() {
|
133
|
+
// return null;
|
134
|
+
// }
|
135
|
+
//
|
136
|
+
// @Override
|
137
|
+
// public int getLine() {
|
138
|
+
// return 0;
|
139
|
+
// }
|
140
|
+
// };
|
141
|
+
// BlockBody body = CompiledBlockLight19.newCompiledBlockLight(Arity.NO_ARGUMENTS, runtime.getStaticScopeFactory().getDummyScope(), callback, false, 0, new String[]{});
|
142
|
+
// Block b = new Block(body, runtime.newBinding().getBinding());
|
143
|
+
//
|
144
|
+
// return RubyProc.newProc(runtime, b, Block.Type.LAMBDA);
|
145
|
+
// }
|
143
146
|
|
144
147
|
public String[] getHostInfo(String host) {
|
145
148
|
String[] hostInfo;
|
@@ -157,11 +160,11 @@ public class RackEnvironment {
|
|
157
160
|
}
|
158
161
|
|
159
162
|
private static String getRemoteAddr(final HttpServerRequest request) {
|
160
|
-
|
163
|
+
SocketAddress sourceAddress = request.remoteAddress();
|
161
164
|
if (sourceAddress == null) {
|
162
165
|
return "";
|
163
166
|
}
|
164
|
-
return sourceAddress.
|
167
|
+
return sourceAddress.host();
|
165
168
|
}
|
166
169
|
|
167
170
|
private static int getContentLength(final MultiMap headers) {
|