rsense-server 0.5.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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/Gemfile +14 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +1 -0
- data/README.md +51 -0
- data/Rakefile +9 -0
- data/bin/_rsense.rb +115 -0
- data/config/puma.rb +2 -0
- data/lib/rsense/server/code.rb +38 -0
- data/lib/rsense/server/command/completion_result.rb +11 -0
- data/lib/rsense/server/command/special_meth.rb +18 -0
- data/lib/rsense/server/command/type_inference_method.rb +24 -0
- data/lib/rsense/server/command.rb +239 -0
- data/lib/rsense/server/config.rb +70 -0
- data/lib/rsense/server/gem_path.rb +18 -0
- data/lib/rsense/server/listeners/find_definition_event_listener.rb +91 -0
- data/lib/rsense/server/listeners/where_event_listener.rb +39 -0
- data/lib/rsense/server/load_path.rb +62 -0
- data/lib/rsense/server/options.rb +85 -0
- data/lib/rsense/server/parser.rb +17 -0
- data/lib/rsense/server/path_info.rb +17 -0
- data/lib/rsense/server/project.rb +24 -0
- data/lib/rsense/server/version.rb +5 -0
- data/lib/rsense/server.rb +18 -0
- data/rsense-server.gemspec +35 -0
- data/spec/fixtures/config_fixture/.rsense +4 -0
- data/spec/fixtures/deeply/nested/thing.rb +0 -0
- data/spec/fixtures/find_def_sample.json +10 -0
- data/spec/fixtures/sample.json +10 -0
- data/spec/fixtures/test_gem/.gitignore +22 -0
- data/spec/fixtures/test_gem/Gemfile +4 -0
- data/spec/fixtures/test_gem/LICENSE.txt +22 -0
- data/spec/fixtures/test_gem/README.md +29 -0
- data/spec/fixtures/test_gem/Rakefile +2 -0
- data/spec/fixtures/test_gem/lib/sample/version.rb +3 -0
- data/spec/fixtures/test_gem/lib/sample.rb +16 -0
- data/spec/fixtures/test_gem/sample.gemspec +23 -0
- data/spec/fixtures/test_gem/test.json +10 -0
- data/spec/rsense/server/code_spec.rb +44 -0
- data/spec/rsense/server/command/special_meth_spec.rb +23 -0
- data/spec/rsense/server/command_spec.rb +108 -0
- data/spec/rsense/server/config_spec.rb +27 -0
- data/spec/rsense/server/gem_path_spec.rb +16 -0
- data/spec/rsense/server/load_path_spec.rb +63 -0
- data/spec/rsense/server/options_spec.rb +33 -0
- data/spec/rsense/server/path_info_spec.rb +11 -0
- data/spec/rsense/server/project_spec.rb +18 -0
- data/spec/rsense/server_spec.rb +7 -0
- data/spec/spec_helper.rb +16 -0
- data/vendor/gems/puma-2.8.2-java/COPYING +55 -0
- data/vendor/gems/puma-2.8.2-java/DEPLOYMENT.md +92 -0
- data/vendor/gems/puma-2.8.2-java/Gemfile +17 -0
- data/vendor/gems/puma-2.8.2-java/History.txt +532 -0
- data/vendor/gems/puma-2.8.2-java/LICENSE +26 -0
- data/vendor/gems/puma-2.8.2-java/Manifest.txt +68 -0
- data/vendor/gems/puma-2.8.2-java/README.md +251 -0
- data/vendor/gems/puma-2.8.2-java/Rakefile +158 -0
- data/vendor/gems/puma-2.8.2-java/bin/puma +10 -0
- data/vendor/gems/puma-2.8.2-java/bin/puma-wild +17 -0
- data/vendor/gems/puma-2.8.2-java/bin/pumactl +12 -0
- data/vendor/gems/puma-2.8.2-java/docs/config.md +0 -0
- data/vendor/gems/puma-2.8.2-java/docs/nginx.md +80 -0
- data/vendor/gems/puma-2.8.2-java/docs/signals.md +42 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/PumaHttp11Service.java +17 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/ext_help.h +15 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/extconf.rb +8 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.c +1225 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.h +64 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.java.rl +161 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.rl +146 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser_common.rl +54 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/io_buffer.c +155 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/mini_ssl.c +195 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/org/jruby/puma/Http11.java +225 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/org/jruby/puma/Http11Parser.java +488 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/org/jruby/puma/MiniSSL.java +289 -0
- data/vendor/gems/puma-2.8.2-java/ext/puma_http11/puma_http11.c +491 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/accept_nonblock.rb +23 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/app/status.rb +59 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/binder.rb +298 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/capistrano.rb +86 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/cli.rb +587 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/client.rb +289 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/cluster.rb +389 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/compat.rb +18 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/configuration.rb +377 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/const.rb +165 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/control_cli.rb +251 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/daemon_ext.rb +25 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/delegation.rb +11 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/detect.rb +4 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/events.rb +130 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/io_buffer.rb +7 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/java_io_buffer.rb +45 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/jruby_restart.rb +83 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/minissl.rb +148 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/null_io.rb +34 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/puma_http11.jar +0 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/rack_default.rb +7 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/rack_patch.rb +45 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/reactor.rb +183 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/runner.rb +146 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/server.rb +801 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/single.rb +102 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/tcp_logger.rb +32 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/thread_pool.rb +185 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma/util.rb +9 -0
- data/vendor/gems/puma-2.8.2-java/lib/puma.rb +14 -0
- data/vendor/gems/puma-2.8.2-java/lib/rack/handler/puma.rb +66 -0
- data/vendor/gems/puma-2.8.2-java/puma.gemspec +55 -0
- data/vendor/gems/puma-2.8.2-java/test/test_app_status.rb +92 -0
- data/vendor/gems/puma-2.8.2-java/test/test_cli.rb +173 -0
- data/vendor/gems/puma-2.8.2-java/test/test_config.rb +26 -0
- data/vendor/gems/puma-2.8.2-java/test/test_http10.rb +27 -0
- data/vendor/gems/puma-2.8.2-java/test/test_http11.rb +144 -0
- data/vendor/gems/puma-2.8.2-java/test/test_integration.rb +165 -0
- data/vendor/gems/puma-2.8.2-java/test/test_iobuffer.rb +38 -0
- data/vendor/gems/puma-2.8.2-java/test/test_minissl.rb +25 -0
- data/vendor/gems/puma-2.8.2-java/test/test_null_io.rb +31 -0
- data/vendor/gems/puma-2.8.2-java/test/test_persistent.rb +238 -0
- data/vendor/gems/puma-2.8.2-java/test/test_puma_server.rb +323 -0
- data/vendor/gems/puma-2.8.2-java/test/test_rack_handler.rb +10 -0
- data/vendor/gems/puma-2.8.2-java/test/test_rack_server.rb +141 -0
- data/vendor/gems/puma-2.8.2-java/test/test_tcp_rack.rb +42 -0
- data/vendor/gems/puma-2.8.2-java/test/test_thread_pool.rb +156 -0
- data/vendor/gems/puma-2.8.2-java/test/test_unix_socket.rb +39 -0
- data/vendor/gems/puma-2.8.2-java/test/test_ws.rb +89 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/README.md +9 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/init.d/README.md +54 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/init.d/puma +332 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/init.d/run-puma +3 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/upstart/README.md +61 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/upstart/puma-manager.conf +31 -0
- data/vendor/gems/puma-2.8.2-java/tools/jungle/upstart/puma.conf +63 -0
- data/vendor/gems/puma-2.8.2-java/tools/trickletest.rb +45 -0
- metadata +389 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
package org.jruby.puma;
|
|
2
|
+
|
|
3
|
+
import org.jruby.Ruby;
|
|
4
|
+
import org.jruby.RubyClass;
|
|
5
|
+
import org.jruby.RubyHash;
|
|
6
|
+
import org.jruby.RubyModule;
|
|
7
|
+
import org.jruby.RubyNumeric;
|
|
8
|
+
import org.jruby.RubyObject;
|
|
9
|
+
import org.jruby.RubyString;
|
|
10
|
+
|
|
11
|
+
import org.jruby.anno.JRubyMethod;
|
|
12
|
+
|
|
13
|
+
import org.jruby.runtime.Block;
|
|
14
|
+
import org.jruby.runtime.ObjectAllocator;
|
|
15
|
+
import org.jruby.runtime.ThreadContext;
|
|
16
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
|
17
|
+
|
|
18
|
+
import org.jruby.exceptions.RaiseException;
|
|
19
|
+
|
|
20
|
+
import org.jruby.util.ByteList;
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
import javax.net.ssl.*;
|
|
24
|
+
import javax.net.ssl.SSLEngineResult.*;
|
|
25
|
+
import java.io.*;
|
|
26
|
+
import java.security.*;
|
|
27
|
+
import java.nio.*;
|
|
28
|
+
|
|
29
|
+
public class MiniSSL extends RubyObject {
|
|
30
|
+
private static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
|
31
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
|
32
|
+
return new MiniSSL(runtime, klass);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
public static void createMiniSSL(Ruby runtime) {
|
|
37
|
+
RubyModule mPuma = runtime.defineModule("Puma");
|
|
38
|
+
RubyModule ssl = mPuma.defineModuleUnder("MiniSSL");
|
|
39
|
+
|
|
40
|
+
mPuma.defineClassUnder("SSLError",
|
|
41
|
+
runtime.getClass("IOError"),
|
|
42
|
+
runtime.getClass("IOError").getAllocator());
|
|
43
|
+
|
|
44
|
+
RubyClass eng = ssl.defineClassUnder("Engine",runtime.getObject(),ALLOCATOR);
|
|
45
|
+
eng.defineAnnotatedMethods(MiniSSL.class);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private Ruby runtime;
|
|
49
|
+
private SSLContext sslc;
|
|
50
|
+
|
|
51
|
+
private SSLEngine engine;
|
|
52
|
+
|
|
53
|
+
private ByteBuffer peerAppData;
|
|
54
|
+
private ByteBuffer peerNetData;
|
|
55
|
+
private ByteBuffer netData;
|
|
56
|
+
private ByteBuffer dummy;
|
|
57
|
+
|
|
58
|
+
public MiniSSL(Ruby runtime, RubyClass klass) {
|
|
59
|
+
super(runtime, klass);
|
|
60
|
+
|
|
61
|
+
this.runtime = runtime;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@JRubyMethod(meta = true)
|
|
65
|
+
public static IRubyObject server(ThreadContext context, IRubyObject recv, IRubyObject key, IRubyObject cert) {
|
|
66
|
+
RubyClass klass = (RubyClass) recv;
|
|
67
|
+
IRubyObject newInstance = klass.newInstance(context,
|
|
68
|
+
new IRubyObject[] { key, cert },
|
|
69
|
+
Block.NULL_BLOCK);
|
|
70
|
+
|
|
71
|
+
return newInstance;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@JRubyMethod
|
|
75
|
+
public IRubyObject initialize(IRubyObject key, IRubyObject cert)
|
|
76
|
+
throws java.security.KeyStoreException,
|
|
77
|
+
java.io.FileNotFoundException,
|
|
78
|
+
java.io.IOException,
|
|
79
|
+
java.io.FileNotFoundException,
|
|
80
|
+
java.security.NoSuchAlgorithmException,
|
|
81
|
+
java.security.KeyManagementException,
|
|
82
|
+
java.security.cert.CertificateException,
|
|
83
|
+
java.security.UnrecoverableKeyException
|
|
84
|
+
{
|
|
85
|
+
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
|
|
86
|
+
KeyStore ts = KeyStore.getInstance(KeyStore.getDefaultType());
|
|
87
|
+
|
|
88
|
+
char[] pass = "blahblah".toCharArray();
|
|
89
|
+
|
|
90
|
+
ks.load(new FileInputStream(key.convertToString().asJavaString()),
|
|
91
|
+
pass);
|
|
92
|
+
ts.load(new FileInputStream(cert.convertToString().asJavaString()),
|
|
93
|
+
pass);
|
|
94
|
+
|
|
95
|
+
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
|
|
96
|
+
kmf.init(ks, pass);
|
|
97
|
+
|
|
98
|
+
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
|
|
99
|
+
tmf.init(ts);
|
|
100
|
+
|
|
101
|
+
SSLContext sslCtx = SSLContext.getInstance("TLS");
|
|
102
|
+
|
|
103
|
+
sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
|
|
104
|
+
|
|
105
|
+
sslc = sslCtx;
|
|
106
|
+
|
|
107
|
+
engine = sslc.createSSLEngine();
|
|
108
|
+
engine.setUseClientMode(false);
|
|
109
|
+
// engine.setNeedClientAuth(true);
|
|
110
|
+
|
|
111
|
+
SSLSession session = engine.getSession();
|
|
112
|
+
peerNetData = ByteBuffer.allocate(session.getPacketBufferSize());
|
|
113
|
+
peerAppData = ByteBuffer.allocate(session.getApplicationBufferSize());
|
|
114
|
+
netData = ByteBuffer.allocate(session.getPacketBufferSize());
|
|
115
|
+
peerNetData.limit(0);
|
|
116
|
+
peerAppData.limit(0);
|
|
117
|
+
netData.limit(0);
|
|
118
|
+
|
|
119
|
+
peerNetData.clear();
|
|
120
|
+
peerAppData.clear();
|
|
121
|
+
netData.clear();
|
|
122
|
+
|
|
123
|
+
dummy = ByteBuffer.allocate(0);
|
|
124
|
+
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@JRubyMethod
|
|
129
|
+
public IRubyObject inject(IRubyObject arg) {
|
|
130
|
+
byte[] bytes = arg.convertToString().getBytes();
|
|
131
|
+
|
|
132
|
+
peerNetData.limit(peerNetData.limit() + bytes.length);
|
|
133
|
+
|
|
134
|
+
log("capacity: " + peerNetData.capacity() + " limit: " + peerNetData.limit());
|
|
135
|
+
|
|
136
|
+
peerNetData.put(bytes);
|
|
137
|
+
|
|
138
|
+
log("netData: " + peerNetData.position() + "/" + peerAppData.limit());
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@JRubyMethod
|
|
143
|
+
public IRubyObject read() throws javax.net.ssl.SSLException, Exception {
|
|
144
|
+
peerAppData.clear();
|
|
145
|
+
peerNetData.flip();
|
|
146
|
+
SSLEngineResult res;
|
|
147
|
+
|
|
148
|
+
log("available read: " + peerNetData.position() + "/ " + peerNetData.limit());
|
|
149
|
+
|
|
150
|
+
if(!peerNetData.hasRemaining()) {
|
|
151
|
+
return getRuntime().getNil();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
do {
|
|
155
|
+
res = engine.unwrap(peerNetData, peerAppData);
|
|
156
|
+
} while(res.getStatus() == SSLEngineResult.Status.OK &&
|
|
157
|
+
res.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_UNWRAP &&
|
|
158
|
+
res.bytesProduced() == 0);
|
|
159
|
+
|
|
160
|
+
log("read: ", res);
|
|
161
|
+
|
|
162
|
+
if(peerNetData.hasRemaining()) {
|
|
163
|
+
log("STILL HAD peerNetData!");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
peerNetData.position(0);
|
|
167
|
+
peerNetData.limit(0);
|
|
168
|
+
|
|
169
|
+
HandshakeStatus hsStatus = runDelegatedTasks(res, engine);
|
|
170
|
+
|
|
171
|
+
if(res.getStatus() == SSLEngineResult.Status.BUFFER_UNDERFLOW) {
|
|
172
|
+
return getRuntime().getNil();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if(hsStatus == HandshakeStatus.NEED_WRAP) {
|
|
176
|
+
netData.clear();
|
|
177
|
+
log("netData: " + netData.limit());
|
|
178
|
+
engine.wrap(dummy, netData);
|
|
179
|
+
return getRuntime().getNil();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if(hsStatus == HandshakeStatus.NEED_UNWRAP) {
|
|
183
|
+
return getRuntime().getNil();
|
|
184
|
+
|
|
185
|
+
// log("peerNet: " + peerNetData.position() + "/" + peerNetData.limit());
|
|
186
|
+
// log("peerApp: " + peerAppData.position() + "/" + peerAppData.limit());
|
|
187
|
+
|
|
188
|
+
// peerNetData.compact();
|
|
189
|
+
|
|
190
|
+
// log("peerNet: " + peerNetData.position() + "/" + peerNetData.limit());
|
|
191
|
+
// do {
|
|
192
|
+
// res = engine.unwrap(peerNetData, peerAppData);
|
|
193
|
+
// } while(res.getStatus() == SSLEngineResult.Status.OK &&
|
|
194
|
+
// res.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_UNWRAP &&
|
|
195
|
+
// res.bytesProduced() == 0);
|
|
196
|
+
// return getRuntime().getNil();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// if(peerAppData.position() == 0 &&
|
|
200
|
+
// res.getStatus() == SSLEngineResult.Status.OK &&
|
|
201
|
+
// peerNetData.hasRemaining()) {
|
|
202
|
+
// res = engine.unwrap(peerNetData, peerAppData);
|
|
203
|
+
// }
|
|
204
|
+
|
|
205
|
+
byte[] bss = new byte[peerAppData.limit()];
|
|
206
|
+
|
|
207
|
+
peerAppData.get(bss);
|
|
208
|
+
|
|
209
|
+
RubyString str = getRuntime().newString("");
|
|
210
|
+
str.setValue(new ByteList(bss));
|
|
211
|
+
|
|
212
|
+
return str;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
private static HandshakeStatus runDelegatedTasks(SSLEngineResult result,
|
|
216
|
+
SSLEngine engine) throws Exception {
|
|
217
|
+
|
|
218
|
+
HandshakeStatus hsStatus = result.getHandshakeStatus();
|
|
219
|
+
|
|
220
|
+
if(hsStatus == HandshakeStatus.NEED_TASK) {
|
|
221
|
+
Runnable runnable;
|
|
222
|
+
while ((runnable = engine.getDelegatedTask()) != null) {
|
|
223
|
+
log("\trunning delegated task...");
|
|
224
|
+
runnable.run();
|
|
225
|
+
}
|
|
226
|
+
hsStatus = engine.getHandshakeStatus();
|
|
227
|
+
if (hsStatus == HandshakeStatus.NEED_TASK) {
|
|
228
|
+
throw new Exception(
|
|
229
|
+
"handshake shouldn't need additional tasks");
|
|
230
|
+
}
|
|
231
|
+
log("\tnew HandshakeStatus: " + hsStatus);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return hsStatus;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
private static void log(String str, SSLEngineResult result) {
|
|
239
|
+
System.out.println("The format of the SSLEngineResult is: \n" +
|
|
240
|
+
"\t\"getStatus() / getHandshakeStatus()\" +\n" +
|
|
241
|
+
"\t\"bytesConsumed() / bytesProduced()\"\n");
|
|
242
|
+
|
|
243
|
+
HandshakeStatus hsStatus = result.getHandshakeStatus();
|
|
244
|
+
log(str +
|
|
245
|
+
result.getStatus() + "/" + hsStatus + ", " +
|
|
246
|
+
result.bytesConsumed() + "/" + result.bytesProduced() +
|
|
247
|
+
" bytes");
|
|
248
|
+
if (hsStatus == HandshakeStatus.FINISHED) {
|
|
249
|
+
log("\t...ready for application data");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
private static void log(String str) {
|
|
254
|
+
System.out.println(str);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
@JRubyMethod
|
|
260
|
+
public IRubyObject write(IRubyObject arg) throws javax.net.ssl.SSLException {
|
|
261
|
+
log("write from: " + netData.position());
|
|
262
|
+
|
|
263
|
+
byte[] bls = arg.convertToString().getBytes();
|
|
264
|
+
ByteBuffer src = ByteBuffer.wrap(bls);
|
|
265
|
+
|
|
266
|
+
SSLEngineResult res = engine.wrap(src, netData);
|
|
267
|
+
|
|
268
|
+
return getRuntime().newFixnum(res.bytesConsumed());
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
@JRubyMethod
|
|
272
|
+
public IRubyObject extract() {
|
|
273
|
+
netData.flip();
|
|
274
|
+
|
|
275
|
+
if(!netData.hasRemaining()) {
|
|
276
|
+
return getRuntime().getNil();
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
byte[] bss = new byte[netData.limit()];
|
|
280
|
+
|
|
281
|
+
netData.get(bss);
|
|
282
|
+
netData.clear();
|
|
283
|
+
|
|
284
|
+
RubyString str = getRuntime().newString("");
|
|
285
|
+
str.setValue(new ByteList(bss));
|
|
286
|
+
|
|
287
|
+
return str;
|
|
288
|
+
}
|
|
289
|
+
}
|