eventmachine 1.0.3-x86-mingw32 → 1.2.0.dev.2-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +84 -1
- data/README.md +6 -7
- data/ext/binder.cpp +10 -10
- data/ext/binder.h +5 -5
- data/ext/cmain.cpp +173 -61
- data/ext/ed.cpp +262 -127
- data/ext/ed.h +50 -30
- data/ext/em.cpp +491 -445
- data/ext/em.h +101 -36
- data/ext/eventmachine.h +67 -51
- data/ext/extconf.rb +124 -31
- data/ext/fastfilereader/extconf.rb +9 -2
- data/ext/fastfilereader/mapper.cpp +3 -1
- data/ext/fastfilereader/rubymain.cpp +7 -7
- data/ext/kb.cpp +1 -1
- data/ext/pipe.cpp +11 -4
- data/ext/project.h +26 -6
- data/ext/rubymain.cpp +408 -201
- data/ext/ssl.cpp +167 -20
- data/ext/ssl.h +11 -2
- data/java/src/com/rubyeventmachine/EmReactor.java +16 -0
- data/java/src/com/rubyeventmachine/EventableChannel.java +2 -0
- data/java/src/com/rubyeventmachine/EventableDatagramChannel.java +6 -0
- data/java/src/com/rubyeventmachine/EventableSocketChannel.java +55 -10
- data/lib/1.9/fastfilereaderext.so +0 -0
- data/lib/1.9/rubyeventmachine.so +0 -0
- data/lib/2.0/fastfilereaderext.so +0 -0
- data/lib/2.0/rubyeventmachine.so +0 -0
- data/lib/2.1/fastfilereaderext.so +0 -0
- data/lib/2.1/rubyeventmachine.so +0 -0
- data/lib/2.2/fastfilereaderext.so +0 -0
- data/lib/2.2/rubyeventmachine.so +0 -0
- data/lib/2.3/fastfilereaderext.so +0 -0
- data/lib/2.3/rubyeventmachine.so +0 -0
- data/lib/em/buftok.rb +34 -85
- data/lib/em/channel.rb +5 -0
- data/lib/em/completion.rb +2 -2
- data/lib/em/connection.rb +62 -4
- data/lib/em/iterator.rb +30 -48
- data/lib/em/pool.rb +1 -1
- data/lib/em/protocols/httpclient.rb +31 -11
- data/lib/em/protocols/line_and_text.rb +4 -4
- data/lib/em/protocols/linetext2.rb +44 -39
- data/lib/em/protocols/smtpclient.rb +60 -31
- data/lib/em/protocols/smtpserver.rb +32 -9
- data/lib/em/pure_ruby.rb +8 -3
- data/lib/em/queue.rb +16 -7
- data/lib/em/resolver.rb +64 -24
- data/lib/em/threaded_resource.rb +2 -2
- data/lib/em/tick_loop.rb +19 -19
- data/lib/em/version.rb +1 -1
- data/lib/eventmachine.rb +96 -49
- data/lib/jeventmachine.rb +17 -0
- data/rakelib/package.rake +31 -4
- data/tests/dhparam.pem +13 -0
- data/tests/em_test_helper.rb +87 -0
- data/tests/test_attach.rb +25 -0
- data/tests/test_basic.rb +27 -38
- data/tests/test_channel.rb +14 -1
- data/tests/test_completion.rb +1 -0
- data/tests/test_connection_count.rb +22 -1
- data/tests/test_connection_write.rb +35 -0
- data/tests/test_defer.rb +17 -0
- data/tests/test_epoll.rb +26 -14
- data/tests/test_file_watch.rb +1 -0
- data/tests/test_fork.rb +75 -0
- data/tests/test_httpclient.rb +43 -0
- data/tests/test_idle_connection.rb +6 -4
- data/tests/test_ipv4.rb +125 -0
- data/tests/test_ipv6.rb +131 -0
- data/tests/test_iterator.rb +115 -0
- data/tests/test_kb.rb +19 -25
- data/tests/test_ltp2.rb +20 -0
- data/tests/test_many_fds.rb +22 -0
- data/tests/test_pause.rb +29 -0
- data/tests/test_pool.rb +2 -0
- data/tests/test_process_watch.rb +2 -0
- data/tests/test_processes.rb +7 -7
- data/tests/test_queue.rb +14 -0
- data/tests/test_resolver.rb +56 -7
- data/tests/test_set_sock_opt.rb +2 -0
- data/tests/test_smtpclient.rb +20 -0
- data/tests/test_ssl_args.rb +2 -2
- data/tests/test_ssl_dhparam.rb +83 -0
- data/tests/test_ssl_ecdh_curve.rb +79 -0
- data/tests/test_ssl_extensions.rb +49 -0
- data/tests/test_ssl_methods.rb +22 -5
- data/tests/test_ssl_protocols.rb +246 -0
- data/tests/test_ssl_verify.rb +103 -59
- data/tests/test_system.rb +4 -0
- data/tests/test_threaded_resource.rb +8 -0
- data/tests/test_unbind_reason.rb +5 -1
- metadata +173 -107
- data/.gitignore +0 -21
- data/.travis.yml +0 -12
- data/.yardopts +0 -7
- data/Gemfile +0 -2
- data/Rakefile +0 -20
- data/eventmachine.gemspec +0 -36
- data/rakelib/cpp.rake_example +0 -77
@@ -12,6 +12,9 @@ def add_define(name)
|
|
12
12
|
$defs.push("-D#{name}")
|
13
13
|
end
|
14
14
|
|
15
|
+
# Eager check devs tools
|
16
|
+
have_devel? if respond_to?(:have_devel?)
|
17
|
+
|
15
18
|
add_define 'BUILD_FOR_RUBY'
|
16
19
|
|
17
20
|
# Minor platform details between *nix and Windows:
|
@@ -43,7 +46,7 @@ when /mswin32/, /mingw32/, /bccwin32/
|
|
43
46
|
check_libs(%w[kernel32 rpcrt4 gdi32], true)
|
44
47
|
|
45
48
|
if GNU_CHAIN
|
46
|
-
CONFIG['
|
49
|
+
CONFIG['LDSHAREDXX'] = "$(CXX) -shared -static-libgcc -static-libstdc++"
|
47
50
|
else
|
48
51
|
$defs.push "-EHs"
|
49
52
|
$defs.push "-GR"
|
@@ -53,13 +56,17 @@ when /solaris/
|
|
53
56
|
add_define 'OS_SOLARIS8'
|
54
57
|
check_libs(%w[nsl socket], true)
|
55
58
|
|
56
|
-
if CONFIG['CC'] == 'cc'
|
59
|
+
if CONFIG['CC'] == 'cc' && (
|
60
|
+
`cc -flags 2>&1` =~ /Sun/ || # detect SUNWspro compiler
|
61
|
+
`cc -V 2>&1` =~ /Sun/ # detect Solaris Studio compiler
|
62
|
+
)
|
57
63
|
# SUN CHAIN
|
58
64
|
add_define 'CC_SUNWspro'
|
59
65
|
$preload = ["\nCXX = CC"] # hack a CXX= line into the makefile
|
60
66
|
$CFLAGS = CONFIG['CFLAGS'] = "-KPIC"
|
61
67
|
CONFIG['CCDLFLAGS'] = "-KPIC"
|
62
68
|
CONFIG['LDSHARED'] = "$(CXX) -G -KPIC -lCstd"
|
69
|
+
CONFIG['LDSHAREDXX'] = "$(CXX) -G -KPIC -lCstd"
|
63
70
|
else
|
64
71
|
# GNU CHAIN
|
65
72
|
# on Unix we need a g++ link, not gcc.
|
@@ -89,6 +89,8 @@ void Mapper_t::Close()
|
|
89
89
|
// Calls to GetChunk are invalid after a call to Close.
|
90
90
|
if (MapPoint) {
|
91
91
|
#ifdef CC_SUNWspro
|
92
|
+
// TODO: The void * cast works fine on Solaris 11, but
|
93
|
+
// I don't know at what point that changed from older Solaris.
|
92
94
|
munmap ((char*)MapPoint, FileSize);
|
93
95
|
#else
|
94
96
|
munmap ((void*)MapPoint, FileSize);
|
@@ -195,7 +197,7 @@ void Mapper_t::Close()
|
|
195
197
|
}
|
196
198
|
if (hFile != INVALID_HANDLE_VALUE) {
|
197
199
|
CloseHandle (hFile);
|
198
|
-
|
200
|
+
hFile = INVALID_HANDLE_VALUE;
|
199
201
|
}
|
200
202
|
}
|
201
203
|
|
@@ -48,9 +48,9 @@ mapper_new
|
|
48
48
|
|
49
49
|
static VALUE mapper_new (VALUE self, VALUE filename)
|
50
50
|
{
|
51
|
-
Mapper_t *m = new Mapper_t (
|
51
|
+
Mapper_t *m = new Mapper_t (StringValueCStr (filename));
|
52
52
|
if (!m)
|
53
|
-
rb_raise (
|
53
|
+
rb_raise (rb_eStandardError, "No Mapper Object");
|
54
54
|
VALUE v = Data_Wrap_Struct (Mapper, 0, mapper_dt, (void*)m);
|
55
55
|
return v;
|
56
56
|
}
|
@@ -65,17 +65,17 @@ static VALUE mapper_get_chunk (VALUE self, VALUE start, VALUE length)
|
|
65
65
|
Mapper_t *m = NULL;
|
66
66
|
Data_Get_Struct (self, Mapper_t, m);
|
67
67
|
if (!m)
|
68
|
-
rb_raise (
|
68
|
+
rb_raise (rb_eStandardError, "No Mapper Object");
|
69
69
|
|
70
70
|
// TODO, what if some moron sends us a negative start value?
|
71
71
|
unsigned _start = NUM2INT (start);
|
72
72
|
unsigned _length = NUM2INT (length);
|
73
73
|
if ((_start + _length) > m->GetFileSize())
|
74
|
-
rb_raise (
|
74
|
+
rb_raise (rb_eStandardError, "Mapper Range Error");
|
75
75
|
|
76
76
|
const char *chunk = m->GetChunk (_start);
|
77
77
|
if (!chunk)
|
78
|
-
rb_raise (
|
78
|
+
rb_raise (rb_eStandardError, "No Mapper Chunk");
|
79
79
|
return rb_str_new (chunk, _length);
|
80
80
|
}
|
81
81
|
|
@@ -88,7 +88,7 @@ static VALUE mapper_close (VALUE self)
|
|
88
88
|
Mapper_t *m = NULL;
|
89
89
|
Data_Get_Struct (self, Mapper_t, m);
|
90
90
|
if (!m)
|
91
|
-
rb_raise (
|
91
|
+
rb_raise (rb_eStandardError, "No Mapper Object");
|
92
92
|
m->Close();
|
93
93
|
return Qnil;
|
94
94
|
}
|
@@ -102,7 +102,7 @@ static VALUE mapper_size (VALUE self)
|
|
102
102
|
Mapper_t *m = NULL;
|
103
103
|
Data_Get_Struct (self, Mapper_t, m);
|
104
104
|
if (!m)
|
105
|
-
rb_raise (
|
105
|
+
rb_raise (rb_eStandardError, "No Mapper Object");
|
106
106
|
return INT2NUM (m->GetFileSize());
|
107
107
|
}
|
108
108
|
|
data/ext/kb.cpp
CHANGED
data/ext/pipe.cpp
CHANGED
@@ -229,6 +229,11 @@ void PipeDescriptor::Write()
|
|
229
229
|
|
230
230
|
assert (GetSocket() != INVALID_SOCKET);
|
231
231
|
int bytes_written = write (GetSocket(), output_buffer, nbytes);
|
232
|
+
#ifdef OS_WIN32
|
233
|
+
int e = WSAGetLastError();
|
234
|
+
#else
|
235
|
+
int e = errno;
|
236
|
+
#endif
|
232
237
|
|
233
238
|
if (bytes_written > 0) {
|
234
239
|
OutboundDataSize -= bytes_written;
|
@@ -242,17 +247,19 @@ void PipeDescriptor::Write()
|
|
242
247
|
OutboundPages.push_front (OutboundPage (buffer, len));
|
243
248
|
}
|
244
249
|
#ifdef HAVE_EPOLL
|
245
|
-
EpollEvent.events =
|
250
|
+
EpollEvent.events = EPOLLIN;
|
251
|
+
if (SelectForWrite())
|
252
|
+
EpollEvent.events |= EPOLLOUT;
|
246
253
|
assert (MyEventMachine);
|
247
254
|
MyEventMachine->Modify (this);
|
248
255
|
#endif
|
249
256
|
}
|
250
257
|
else {
|
251
258
|
#ifdef OS_UNIX
|
252
|
-
if ((
|
259
|
+
if ((e != EINPROGRESS) && (e != EWOULDBLOCK) && (e != EINTR))
|
253
260
|
#endif
|
254
261
|
#ifdef OS_WIN32
|
255
|
-
if ((
|
262
|
+
if ((e != WSAEINPROGRESS) && (e != WSAEWOULDBLOCK))
|
256
263
|
#endif
|
257
264
|
Close();
|
258
265
|
}
|
@@ -305,7 +312,7 @@ bool PipeDescriptor::SelectForWrite()
|
|
305
312
|
PipeDescriptor::SendOutboundData
|
306
313
|
********************************/
|
307
314
|
|
308
|
-
int PipeDescriptor::SendOutboundData (const char *data,
|
315
|
+
int PipeDescriptor::SendOutboundData (const char *data, unsigned long length)
|
309
316
|
{
|
310
317
|
//if (bCloseNow || bCloseAfterWriting)
|
311
318
|
if (IsCloseScheduled())
|
data/ext/project.h
CHANGED
@@ -22,10 +22,6 @@ See the file COPYING for complete licensing information.
|
|
22
22
|
#define __Project__H_
|
23
23
|
|
24
24
|
|
25
|
-
#ifdef OS_WIN32
|
26
|
-
#pragma warning(disable:4786)
|
27
|
-
#endif
|
28
|
-
|
29
25
|
#include <iostream>
|
30
26
|
#include <map>
|
31
27
|
#include <set>
|
@@ -78,6 +74,11 @@ typedef int SOCKET;
|
|
78
74
|
#endif
|
79
75
|
#endif /* _AIX */
|
80
76
|
|
77
|
+
#ifdef OS_DARWIN
|
78
|
+
#include <mach/mach.h>
|
79
|
+
#include <mach/mach_time.h>
|
80
|
+
#endif /* OS_DARWIN */
|
81
|
+
|
81
82
|
#endif /* OS_UNIX */
|
82
83
|
|
83
84
|
#ifdef OS_WIN32
|
@@ -85,7 +86,9 @@ typedef int SOCKET;
|
|
85
86
|
// 18Jun12: fd_setsize must be changed in the ruby binary (not in this extension). redefining it also causes segvs, see eventmachine/eventmachine#333
|
86
87
|
//#define FD_SETSIZE 1024
|
87
88
|
|
89
|
+
// WIN32_LEAN_AND_MEAN excludes APIs such as Cryptography, DDE, RPC, Shell, and Windows Sockets.
|
88
90
|
#define WIN32_LEAN_AND_MEAN
|
91
|
+
|
89
92
|
#include <windows.h>
|
90
93
|
#include <winsock2.h>
|
91
94
|
#include <ws2tcpip.h>
|
@@ -93,10 +96,21 @@ typedef int SOCKET;
|
|
93
96
|
#include <fcntl.h>
|
94
97
|
#include <assert.h>
|
95
98
|
|
96
|
-
|
97
|
-
|
99
|
+
// Older versions of MinGW in the Ruby Dev Kit do not provide the getaddrinfo hint flags
|
100
|
+
#ifndef AI_ADDRCONFIG
|
101
|
+
#define AI_ADDRCONFIG 0x0400
|
98
102
|
#endif
|
99
103
|
|
104
|
+
#ifndef AI_NUMERICSERV
|
105
|
+
#define AI_NUMERICSERV 0x0008
|
106
|
+
#endif
|
107
|
+
|
108
|
+
// Use the Win32 wrapper library that Ruby owns to be able to close sockets with the close() function
|
109
|
+
#define RUBY_EXPORT
|
110
|
+
#include <ruby/defines.h>
|
111
|
+
#include <ruby/win32.h>
|
112
|
+
#endif /* OS_WIN32 */
|
113
|
+
|
100
114
|
#if !defined(_MSC_VER) || _MSC_VER > 1500
|
101
115
|
#include <stdint.h>
|
102
116
|
#endif
|
@@ -146,6 +160,12 @@ extern "C" {
|
|
146
160
|
}
|
147
161
|
#endif
|
148
162
|
|
163
|
+
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
164
|
+
#define UNUSED __attribute__ ((unused))
|
165
|
+
#else
|
166
|
+
#define UNUSED
|
167
|
+
#endif
|
168
|
+
|
149
169
|
#include "binder.h"
|
150
170
|
#include "em.h"
|
151
171
|
#include "ed.h"
|
data/ext/rubymain.cpp
CHANGED
@@ -25,6 +25,26 @@ See the file COPYING for complete licensing information.
|
|
25
25
|
#define RFLOAT_VALUE(arg) RFLOAT(arg)->value
|
26
26
|
#endif
|
27
27
|
|
28
|
+
/* Adapted from NUM2BSIG / BSIG2NUM in ext/fiddle/conversions.h,
|
29
|
+
* we'll call it a BSIG for Binding Signature here. */
|
30
|
+
#if SIZEOF_VOIDP == SIZEOF_LONG
|
31
|
+
# define BSIG2NUM(x) (ULONG2NUM((unsigned long)(x)))
|
32
|
+
# define NUM2BSIG(x) (NUM2ULONG(x))
|
33
|
+
# ifdef OS_WIN32
|
34
|
+
# define PRIFBSIG "I32u"
|
35
|
+
# else
|
36
|
+
# define PRIFBSIG "lu"
|
37
|
+
# endif
|
38
|
+
#else
|
39
|
+
# define BSIG2NUM(x) (ULL2NUM((unsigned long long)(x)))
|
40
|
+
# define NUM2BSIG(x) (NUM2ULL(x))
|
41
|
+
# ifdef OS_WIN32
|
42
|
+
# define PRIFBSIG "I64u"
|
43
|
+
# else
|
44
|
+
# define PRIFBSIG "llu"
|
45
|
+
# endif
|
46
|
+
#endif
|
47
|
+
|
28
48
|
/*******
|
29
49
|
Statics
|
30
50
|
*******/
|
@@ -47,6 +67,7 @@ static VALUE Intern_event_callback;
|
|
47
67
|
static VALUE Intern_run_deferred_callbacks;
|
48
68
|
static VALUE Intern_delete;
|
49
69
|
static VALUE Intern_call;
|
70
|
+
static VALUE Intern_at;
|
50
71
|
static VALUE Intern_receive_data;
|
51
72
|
static VALUE Intern_ssl_handshake_completed;
|
52
73
|
static VALUE Intern_ssl_verify_peer;
|
@@ -59,17 +80,17 @@ static VALUE Intern_connection_completed;
|
|
59
80
|
static VALUE rb_cProcStatus;
|
60
81
|
|
61
82
|
struct em_event {
|
62
|
-
|
83
|
+
uintptr_t signature;
|
63
84
|
int event;
|
64
85
|
const char *data_str;
|
65
86
|
unsigned long data_num;
|
66
87
|
};
|
67
88
|
|
68
|
-
static inline VALUE ensure_conn(const
|
89
|
+
static inline VALUE ensure_conn(const uintptr_t signature)
|
69
90
|
{
|
70
|
-
VALUE conn = rb_hash_aref (EmConnsHash,
|
91
|
+
VALUE conn = rb_hash_aref (EmConnsHash, BSIG2NUM (signature));
|
71
92
|
if (conn == Qnil)
|
72
|
-
rb_raise (EM_eConnectionNotBound, "unknown connection: %
|
93
|
+
rb_raise (EM_eConnectionNotBound, "unknown connection: %" PRIFBSIG, signature);
|
73
94
|
return conn;
|
74
95
|
}
|
75
96
|
|
@@ -80,7 +101,7 @@ t_event_callback
|
|
80
101
|
|
81
102
|
static inline void event_callback (struct em_event* e)
|
82
103
|
{
|
83
|
-
const
|
104
|
+
const uintptr_t signature = e->signature;
|
84
105
|
int event = e->event;
|
85
106
|
const char *data_str = e->data_str;
|
86
107
|
const unsigned long data_num = e->data_num;
|
@@ -88,20 +109,20 @@ static inline void event_callback (struct em_event* e)
|
|
88
109
|
switch (event) {
|
89
110
|
case EM_CONNECTION_READ:
|
90
111
|
{
|
91
|
-
VALUE conn = rb_hash_aref (EmConnsHash,
|
112
|
+
VALUE conn = rb_hash_aref (EmConnsHash, BSIG2NUM (signature));
|
92
113
|
if (conn == Qnil)
|
93
|
-
rb_raise (EM_eConnectionNotBound, "received %lu bytes of data for unknown signature: %
|
114
|
+
rb_raise (EM_eConnectionNotBound, "received %lu bytes of data for unknown signature: %" PRIFBSIG, data_num, signature);
|
94
115
|
rb_funcall (conn, Intern_receive_data, 1, rb_str_new (data_str, data_num));
|
95
116
|
return;
|
96
117
|
}
|
97
118
|
case EM_CONNECTION_ACCEPTED:
|
98
119
|
{
|
99
|
-
rb_funcall (EmModule, Intern_event_callback, 3,
|
120
|
+
rb_funcall (EmModule, Intern_event_callback, 3, BSIG2NUM(signature), INT2FIX(event), ULONG2NUM(data_num));
|
100
121
|
return;
|
101
122
|
}
|
102
123
|
case EM_CONNECTION_UNBOUND:
|
103
124
|
{
|
104
|
-
rb_funcall (EmModule, Intern_event_callback, 3,
|
125
|
+
rb_funcall (EmModule, Intern_event_callback, 3, BSIG2NUM(signature), INT2FIX(event), ULONG2NUM(data_num));
|
105
126
|
return;
|
106
127
|
}
|
107
128
|
case EM_CONNECTION_COMPLETED:
|
@@ -174,7 +195,7 @@ static inline void event_callback (struct em_event* e)
|
|
174
195
|
event_error_handler
|
175
196
|
*******************/
|
176
197
|
|
177
|
-
static void event_error_handler(VALUE
|
198
|
+
static void event_error_handler(VALUE self UNUSED, VALUE err)
|
178
199
|
{
|
179
200
|
VALUE error_handler = rb_ivar_get(EmModule, Intern_at_error_handler);
|
180
201
|
rb_funcall (error_handler, Intern_call, 1, err);
|
@@ -184,7 +205,7 @@ static void event_error_handler(VALUE unused, VALUE err)
|
|
184
205
|
event_callback_wrapper
|
185
206
|
**********************/
|
186
207
|
|
187
|
-
static void event_callback_wrapper (const
|
208
|
+
static void event_callback_wrapper (const uintptr_t signature, int event, const char *data_str, const unsigned long data_num)
|
188
209
|
{
|
189
210
|
struct em_event e;
|
190
211
|
e.signature = signature;
|
@@ -202,7 +223,7 @@ static void event_callback_wrapper (const unsigned long signature, int event, co
|
|
202
223
|
t_initialize_event_machine
|
203
224
|
**************************/
|
204
225
|
|
205
|
-
static VALUE t_initialize_event_machine (VALUE self)
|
226
|
+
static VALUE t_initialize_event_machine (VALUE self UNUSED)
|
206
227
|
{
|
207
228
|
EmConnsHash = rb_ivar_get (EmModule, Intern_at_conns);
|
208
229
|
EmTimersHash = rb_ivar_get (EmModule, Intern_at_timers);
|
@@ -213,12 +234,21 @@ static VALUE t_initialize_event_machine (VALUE self)
|
|
213
234
|
}
|
214
235
|
|
215
236
|
|
237
|
+
/******************
|
238
|
+
t_run_machine_once
|
239
|
+
******************/
|
216
240
|
|
217
|
-
|
218
|
-
|
219
|
-
|
241
|
+
static VALUE t_run_machine_once (VALUE self UNUSED)
|
242
|
+
{
|
243
|
+
return evma_run_machine_once () ? Qtrue : Qfalse;
|
244
|
+
}
|
220
245
|
|
221
|
-
|
246
|
+
|
247
|
+
/*************
|
248
|
+
t_run_machine
|
249
|
+
*************/
|
250
|
+
|
251
|
+
static VALUE t_run_machine (VALUE self UNUSED)
|
222
252
|
{
|
223
253
|
evma_run_machine();
|
224
254
|
return Qnil;
|
@@ -229,12 +259,12 @@ static VALUE t_run_machine_without_threads (VALUE self)
|
|
229
259
|
t_add_oneshot_timer
|
230
260
|
*******************/
|
231
261
|
|
232
|
-
static VALUE t_add_oneshot_timer (VALUE self, VALUE interval)
|
262
|
+
static VALUE t_add_oneshot_timer (VALUE self UNUSED, VALUE interval)
|
233
263
|
{
|
234
|
-
const
|
264
|
+
const uintptr_t f = evma_install_oneshot_timer (FIX2INT (interval));
|
235
265
|
if (!f)
|
236
266
|
rb_raise (rb_eRuntimeError, "%s", "ran out of timers; use #set_max_timers to increase limit");
|
237
|
-
return
|
267
|
+
return BSIG2NUM (f);
|
238
268
|
}
|
239
269
|
|
240
270
|
|
@@ -242,21 +272,21 @@ static VALUE t_add_oneshot_timer (VALUE self, VALUE interval)
|
|
242
272
|
t_start_server
|
243
273
|
**************/
|
244
274
|
|
245
|
-
static VALUE t_start_server (VALUE self, VALUE server, VALUE port)
|
275
|
+
static VALUE t_start_server (VALUE self UNUSED, VALUE server, VALUE port)
|
246
276
|
{
|
247
|
-
const
|
277
|
+
const uintptr_t f = evma_create_tcp_server (StringValueCStr(server), FIX2INT(port));
|
248
278
|
if (!f)
|
249
279
|
rb_raise (rb_eRuntimeError, "%s", "no acceptor (port is in use or requires root privileges)");
|
250
|
-
return
|
280
|
+
return BSIG2NUM (f);
|
251
281
|
}
|
252
282
|
|
253
283
|
/*************
|
254
284
|
t_stop_server
|
255
285
|
*************/
|
256
286
|
|
257
|
-
static VALUE t_stop_server (VALUE self, VALUE signature)
|
287
|
+
static VALUE t_stop_server (VALUE self UNUSED, VALUE signature)
|
258
288
|
{
|
259
|
-
evma_stop_tcp_server (
|
289
|
+
evma_stop_tcp_server (NUM2BSIG (signature));
|
260
290
|
return Qnil;
|
261
291
|
}
|
262
292
|
|
@@ -265,23 +295,34 @@ static VALUE t_stop_server (VALUE self, VALUE signature)
|
|
265
295
|
t_start_unix_server
|
266
296
|
*******************/
|
267
297
|
|
268
|
-
static VALUE t_start_unix_server (VALUE self, VALUE filename)
|
298
|
+
static VALUE t_start_unix_server (VALUE self UNUSED, VALUE filename)
|
269
299
|
{
|
270
|
-
const
|
300
|
+
const uintptr_t f = evma_create_unix_domain_server (StringValueCStr(filename));
|
271
301
|
if (!f)
|
272
302
|
rb_raise (rb_eRuntimeError, "%s", "no unix-domain acceptor");
|
273
|
-
return
|
303
|
+
return BSIG2NUM (f);
|
274
304
|
}
|
275
305
|
|
306
|
+
/********************
|
307
|
+
t_attach_sd
|
308
|
+
********************/
|
309
|
+
|
310
|
+
static VALUE t_attach_sd(VALUE self UNUSED, VALUE sd)
|
311
|
+
{
|
312
|
+
const uintptr_t f = evma_attach_sd(FIX2INT(sd));
|
313
|
+
if (!f)
|
314
|
+
rb_raise (rb_eRuntimeError, "%s", "no socket descriptor acceptor");
|
315
|
+
return BSIG2NUM (f);
|
316
|
+
}
|
276
317
|
|
277
318
|
|
278
319
|
/***********
|
279
320
|
t_send_data
|
280
321
|
***********/
|
281
322
|
|
282
|
-
static VALUE t_send_data (VALUE self, VALUE signature, VALUE data, VALUE data_length)
|
323
|
+
static VALUE t_send_data (VALUE self UNUSED, VALUE signature, VALUE data, VALUE data_length)
|
283
324
|
{
|
284
|
-
int b = evma_send_data_to_connection (
|
325
|
+
int b = evma_send_data_to_connection (NUM2BSIG (signature), StringValuePtr (data), FIX2INT (data_length));
|
285
326
|
return INT2NUM (b);
|
286
327
|
}
|
287
328
|
|
@@ -290,9 +331,9 @@ static VALUE t_send_data (VALUE self, VALUE signature, VALUE data, VALUE data_le
|
|
290
331
|
t_start_tls
|
291
332
|
***********/
|
292
333
|
|
293
|
-
static VALUE t_start_tls (VALUE self, VALUE signature)
|
334
|
+
static VALUE t_start_tls (VALUE self UNUSED, VALUE signature)
|
294
335
|
{
|
295
|
-
evma_start_tls (
|
336
|
+
evma_start_tls (NUM2BSIG (signature));
|
296
337
|
return Qnil;
|
297
338
|
}
|
298
339
|
|
@@ -300,14 +341,14 @@ static VALUE t_start_tls (VALUE self, VALUE signature)
|
|
300
341
|
t_set_tls_parms
|
301
342
|
***************/
|
302
343
|
|
303
|
-
static VALUE t_set_tls_parms (VALUE self, VALUE signature, VALUE privkeyfile, VALUE certchainfile, VALUE verify_peer)
|
344
|
+
static VALUE t_set_tls_parms (VALUE self UNUSED, VALUE signature, VALUE privkeyfile, VALUE certchainfile, VALUE verify_peer, VALUE fail_if_no_peer_cert, VALUE snihostname, VALUE cipherlist, VALUE ecdh_curve, VALUE dhparam, VALUE ssl_version)
|
304
345
|
{
|
305
346
|
/* set_tls_parms takes a series of positional arguments for specifying such things
|
306
347
|
* as private keys and certificate chains.
|
307
348
|
* It's expected that the parameter list will grow as we add more supported features.
|
308
349
|
* ALL of these parameters are optional, and can be specified as empty or NULL strings.
|
309
350
|
*/
|
310
|
-
evma_set_tls_parms (
|
351
|
+
evma_set_tls_parms (NUM2BSIG (signature), StringValueCStr (privkeyfile), StringValueCStr (certchainfile), (verify_peer == Qtrue ? 1 : 0), (fail_if_no_peer_cert == Qtrue ? 1 : 0), StringValueCStr (snihostname), StringValueCStr (cipherlist), StringValueCStr (ecdh_curve), StringValueCStr (dhparam), NUM2INT (ssl_version));
|
311
352
|
return Qnil;
|
312
353
|
}
|
313
354
|
|
@@ -315,16 +356,16 @@ static VALUE t_set_tls_parms (VALUE self, VALUE signature, VALUE privkeyfile, VA
|
|
315
356
|
t_get_peer_cert
|
316
357
|
***************/
|
317
358
|
|
318
|
-
|
359
|
+
#ifdef WITH_SSL
|
360
|
+
static VALUE t_get_peer_cert (VALUE self UNUSED, VALUE signature)
|
319
361
|
{
|
320
362
|
VALUE ret = Qnil;
|
321
363
|
|
322
|
-
#ifdef WITH_SSL
|
323
364
|
X509 *cert = NULL;
|
324
365
|
BUF_MEM *buf;
|
325
366
|
BIO *out;
|
326
367
|
|
327
|
-
cert = evma_get_peer_cert (
|
368
|
+
cert = evma_get_peer_cert (NUM2BSIG (signature));
|
328
369
|
|
329
370
|
if (cert != NULL) {
|
330
371
|
out = BIO_new(BIO_s_mem());
|
@@ -334,20 +375,104 @@ static VALUE t_get_peer_cert (VALUE self, VALUE signature)
|
|
334
375
|
X509_free(cert);
|
335
376
|
BIO_free(out);
|
336
377
|
}
|
337
|
-
#endif
|
338
378
|
|
339
379
|
return ret;
|
340
380
|
}
|
381
|
+
#else
|
382
|
+
static VALUE t_get_peer_cert (VALUE self UNUSED, VALUE signature UNUSED)
|
383
|
+
{
|
384
|
+
return Qnil;
|
385
|
+
}
|
386
|
+
#endif
|
387
|
+
|
388
|
+
/***************
|
389
|
+
t_get_cipher_bits
|
390
|
+
***************/
|
391
|
+
|
392
|
+
#ifdef WITH_SSL
|
393
|
+
static VALUE t_get_cipher_bits (VALUE self UNUSED, VALUE signature)
|
394
|
+
{
|
395
|
+
int bits = evma_get_cipher_bits (NUM2BSIG (signature));
|
396
|
+
if (bits == -1)
|
397
|
+
return Qnil;
|
398
|
+
return INT2NUM (bits);
|
399
|
+
}
|
400
|
+
#else
|
401
|
+
static VALUE t_get_cipher_bits (VALUE self UNUSED, VALUE signature UNUSED)
|
402
|
+
{
|
403
|
+
return Qnil;
|
404
|
+
}
|
405
|
+
#endif
|
406
|
+
|
407
|
+
/***************
|
408
|
+
t_get_cipher_name
|
409
|
+
***************/
|
410
|
+
|
411
|
+
#ifdef WITH_SSL
|
412
|
+
static VALUE t_get_cipher_name (VALUE self UNUSED, VALUE signature)
|
413
|
+
{
|
414
|
+
const char *protocol = evma_get_cipher_name (NUM2BSIG (signature));
|
415
|
+
if (protocol)
|
416
|
+
return rb_str_new2 (protocol);
|
417
|
+
|
418
|
+
return Qnil;
|
419
|
+
}
|
420
|
+
#else
|
421
|
+
static VALUE t_get_cipher_name (VALUE self UNUSED, VALUE signature UNUSED)
|
422
|
+
{
|
423
|
+
return Qnil;
|
424
|
+
}
|
425
|
+
#endif
|
426
|
+
|
427
|
+
/***************
|
428
|
+
t_get_cipher_protocol
|
429
|
+
***************/
|
430
|
+
|
431
|
+
#ifdef WITH_SSL
|
432
|
+
static VALUE t_get_cipher_protocol (VALUE self UNUSED, VALUE signature)
|
433
|
+
{
|
434
|
+
const char *cipher = evma_get_cipher_protocol (NUM2BSIG (signature));
|
435
|
+
if (cipher)
|
436
|
+
return rb_str_new2 (cipher);
|
437
|
+
|
438
|
+
return Qnil;
|
439
|
+
}
|
440
|
+
#else
|
441
|
+
static VALUE t_get_cipher_protocol (VALUE self UNUSED, VALUE signature UNUSED)
|
442
|
+
{
|
443
|
+
return Qnil;
|
444
|
+
}
|
445
|
+
#endif
|
446
|
+
|
447
|
+
/***************
|
448
|
+
t_get_sni_hostname
|
449
|
+
***************/
|
450
|
+
|
451
|
+
#ifdef WITH_SSL
|
452
|
+
static VALUE t_get_sni_hostname (VALUE self UNUSED, VALUE signature)
|
453
|
+
{
|
454
|
+
const char *sni_hostname = evma_get_sni_hostname (NUM2BSIG (signature));
|
455
|
+
if (sni_hostname)
|
456
|
+
return rb_str_new2 (sni_hostname);
|
457
|
+
|
458
|
+
return Qnil;
|
459
|
+
}
|
460
|
+
#else
|
461
|
+
static VALUE t_get_sni_hostname (VALUE self UNUSED, VALUE signature UNUSED)
|
462
|
+
{
|
463
|
+
return Qnil;
|
464
|
+
}
|
465
|
+
#endif
|
341
466
|
|
342
467
|
/**************
|
343
468
|
t_get_peername
|
344
469
|
**************/
|
345
470
|
|
346
|
-
static VALUE t_get_peername (VALUE self, VALUE signature)
|
471
|
+
static VALUE t_get_peername (VALUE self UNUSED, VALUE signature)
|
347
472
|
{
|
348
473
|
char buf[1024];
|
349
474
|
socklen_t len = sizeof buf;
|
350
|
-
if (evma_get_peername (
|
475
|
+
if (evma_get_peername (NUM2BSIG (signature), (struct sockaddr*)buf, &len)) {
|
351
476
|
return rb_str_new (buf, len);
|
352
477
|
}
|
353
478
|
|
@@ -358,11 +483,11 @@ static VALUE t_get_peername (VALUE self, VALUE signature)
|
|
358
483
|
t_get_sockname
|
359
484
|
**************/
|
360
485
|
|
361
|
-
static VALUE t_get_sockname (VALUE self, VALUE signature)
|
486
|
+
static VALUE t_get_sockname (VALUE self UNUSED, VALUE signature)
|
362
487
|
{
|
363
488
|
char buf[1024];
|
364
489
|
socklen_t len = sizeof buf;
|
365
|
-
if (evma_get_sockname (
|
490
|
+
if (evma_get_sockname (NUM2BSIG (signature), (struct sockaddr*)buf, &len)) {
|
366
491
|
return rb_str_new (buf, len);
|
367
492
|
}
|
368
493
|
|
@@ -373,10 +498,10 @@ static VALUE t_get_sockname (VALUE self, VALUE signature)
|
|
373
498
|
t_get_subprocess_pid
|
374
499
|
********************/
|
375
500
|
|
376
|
-
static VALUE t_get_subprocess_pid (VALUE self, VALUE signature)
|
501
|
+
static VALUE t_get_subprocess_pid (VALUE self UNUSED, VALUE signature)
|
377
502
|
{
|
378
503
|
pid_t pid;
|
379
|
-
if (evma_get_subprocess_pid (
|
504
|
+
if (evma_get_subprocess_pid (NUM2BSIG (signature), &pid)) {
|
380
505
|
return INT2NUM (pid);
|
381
506
|
}
|
382
507
|
|
@@ -387,18 +512,32 @@ static VALUE t_get_subprocess_pid (VALUE self, VALUE signature)
|
|
387
512
|
t_get_subprocess_status
|
388
513
|
***********************/
|
389
514
|
|
390
|
-
static VALUE t_get_subprocess_status (VALUE self, VALUE signature)
|
515
|
+
static VALUE t_get_subprocess_status (VALUE self UNUSED, VALUE signature)
|
391
516
|
{
|
392
517
|
VALUE proc_status = Qnil;
|
393
518
|
|
394
519
|
int status;
|
395
520
|
pid_t pid;
|
396
521
|
|
397
|
-
if (evma_get_subprocess_status (
|
398
|
-
if (evma_get_subprocess_pid (
|
522
|
+
if (evma_get_subprocess_status (NUM2BSIG (signature), &status)) {
|
523
|
+
if (evma_get_subprocess_pid (NUM2BSIG (signature), &pid)) {
|
399
524
|
proc_status = rb_obj_alloc(rb_cProcStatus);
|
525
|
+
|
526
|
+
/* MRI Ruby uses hidden instance vars */
|
400
527
|
rb_iv_set(proc_status, "status", INT2FIX(status));
|
401
528
|
rb_iv_set(proc_status, "pid", INT2FIX(pid));
|
529
|
+
|
530
|
+
#ifdef RUBINIUS
|
531
|
+
/* Rubinius uses standard instance vars */
|
532
|
+
rb_iv_set(proc_status, "@pid", INT2FIX(pid));
|
533
|
+
if (WIFEXITED(status)) {
|
534
|
+
rb_iv_set(proc_status, "@status", INT2FIX(WEXITSTATUS(status)));
|
535
|
+
} else if (WIFSIGNALED(status)) {
|
536
|
+
rb_iv_set(proc_status, "@termsig", INT2FIX(WTERMSIG(status)));
|
537
|
+
} else if (WIFSTOPPED(status)){
|
538
|
+
rb_iv_set(proc_status, "@stopsig", INT2FIX(WSTOPSIG(status)));
|
539
|
+
}
|
540
|
+
#endif
|
402
541
|
}
|
403
542
|
}
|
404
543
|
|
@@ -409,7 +548,7 @@ static VALUE t_get_subprocess_status (VALUE self, VALUE signature)
|
|
409
548
|
t_get_connection_count
|
410
549
|
**********************/
|
411
550
|
|
412
|
-
static VALUE t_get_connection_count (VALUE self)
|
551
|
+
static VALUE t_get_connection_count (VALUE self UNUSED)
|
413
552
|
{
|
414
553
|
return INT2NUM(evma_get_connection_count());
|
415
554
|
}
|
@@ -418,19 +557,19 @@ static VALUE t_get_connection_count (VALUE self)
|
|
418
557
|
t_get_comm_inactivity_timeout
|
419
558
|
*****************************/
|
420
559
|
|
421
|
-
static VALUE t_get_comm_inactivity_timeout (VALUE self, VALUE signature)
|
560
|
+
static VALUE t_get_comm_inactivity_timeout (VALUE self UNUSED, VALUE signature)
|
422
561
|
{
|
423
|
-
return rb_float_new(evma_get_comm_inactivity_timeout(
|
562
|
+
return rb_float_new(evma_get_comm_inactivity_timeout(NUM2BSIG (signature)));
|
424
563
|
}
|
425
564
|
|
426
565
|
/*****************************
|
427
566
|
t_set_comm_inactivity_timeout
|
428
567
|
*****************************/
|
429
568
|
|
430
|
-
static VALUE t_set_comm_inactivity_timeout (VALUE self, VALUE signature, VALUE timeout)
|
569
|
+
static VALUE t_set_comm_inactivity_timeout (VALUE self UNUSED, VALUE signature, VALUE timeout)
|
431
570
|
{
|
432
571
|
float ti = RFLOAT_VALUE(timeout);
|
433
|
-
if (evma_set_comm_inactivity_timeout(
|
572
|
+
if (evma_set_comm_inactivity_timeout(NUM2BSIG(signature), ti)) {
|
434
573
|
return Qtrue;
|
435
574
|
}
|
436
575
|
return Qfalse;
|
@@ -440,19 +579,19 @@ static VALUE t_set_comm_inactivity_timeout (VALUE self, VALUE signature, VALUE t
|
|
440
579
|
t_get_pending_connect_timeout
|
441
580
|
*****************************/
|
442
581
|
|
443
|
-
static VALUE t_get_pending_connect_timeout (VALUE self, VALUE signature)
|
582
|
+
static VALUE t_get_pending_connect_timeout (VALUE self UNUSED, VALUE signature)
|
444
583
|
{
|
445
|
-
return rb_float_new(evma_get_pending_connect_timeout(
|
584
|
+
return rb_float_new(evma_get_pending_connect_timeout(NUM2BSIG (signature)));
|
446
585
|
}
|
447
586
|
|
448
587
|
/*****************************
|
449
588
|
t_set_pending_connect_timeout
|
450
589
|
*****************************/
|
451
590
|
|
452
|
-
static VALUE t_set_pending_connect_timeout (VALUE self, VALUE signature, VALUE timeout)
|
591
|
+
static VALUE t_set_pending_connect_timeout (VALUE self UNUSED, VALUE signature, VALUE timeout)
|
453
592
|
{
|
454
593
|
float ti = RFLOAT_VALUE(timeout);
|
455
|
-
if (evma_set_pending_connect_timeout(
|
594
|
+
if (evma_set_pending_connect_timeout(NUM2BSIG(signature), ti)) {
|
456
595
|
return Qtrue;
|
457
596
|
}
|
458
597
|
return Qfalse;
|
@@ -462,9 +601,11 @@ static VALUE t_set_pending_connect_timeout (VALUE self, VALUE signature, VALUE t
|
|
462
601
|
t_send_datagram
|
463
602
|
***************/
|
464
603
|
|
465
|
-
static VALUE t_send_datagram (VALUE self, VALUE signature, VALUE data, VALUE data_length, VALUE address, VALUE port)
|
604
|
+
static VALUE t_send_datagram (VALUE self UNUSED, VALUE signature, VALUE data, VALUE data_length, VALUE address, VALUE port)
|
466
605
|
{
|
467
|
-
int b = evma_send_datagram (
|
606
|
+
int b = evma_send_datagram (NUM2BSIG (signature), StringValuePtr (data), FIX2INT (data_length), StringValueCStr(address), FIX2INT(port));
|
607
|
+
if (b < 0)
|
608
|
+
rb_raise (EM_eConnectionError, "%s", "error in sending datagram"); // FIXME: this could be more specific.
|
468
609
|
return INT2NUM (b);
|
469
610
|
}
|
470
611
|
|
@@ -473,9 +614,9 @@ static VALUE t_send_datagram (VALUE self, VALUE signature, VALUE data, VALUE dat
|
|
473
614
|
t_close_connection
|
474
615
|
******************/
|
475
616
|
|
476
|
-
static VALUE t_close_connection (VALUE self, VALUE signature, VALUE after_writing)
|
617
|
+
static VALUE t_close_connection (VALUE self UNUSED, VALUE signature, VALUE after_writing)
|
477
618
|
{
|
478
|
-
evma_close_connection (
|
619
|
+
evma_close_connection (NUM2BSIG (signature), ((after_writing == Qtrue) ? 1 : 0));
|
479
620
|
return Qnil;
|
480
621
|
}
|
481
622
|
|
@@ -483,9 +624,9 @@ static VALUE t_close_connection (VALUE self, VALUE signature, VALUE after_writin
|
|
483
624
|
t_report_connection_error_status
|
484
625
|
********************************/
|
485
626
|
|
486
|
-
static VALUE t_report_connection_error_status (VALUE self, VALUE signature)
|
627
|
+
static VALUE t_report_connection_error_status (VALUE self UNUSED, VALUE signature)
|
487
628
|
{
|
488
|
-
int b = evma_report_connection_error_status (
|
629
|
+
int b = evma_report_connection_error_status (NUM2BSIG (signature));
|
489
630
|
return INT2NUM (b);
|
490
631
|
}
|
491
632
|
|
@@ -495,17 +636,17 @@ static VALUE t_report_connection_error_status (VALUE self, VALUE signature)
|
|
495
636
|
t_connect_server
|
496
637
|
****************/
|
497
638
|
|
498
|
-
static VALUE t_connect_server (VALUE self, VALUE server, VALUE port)
|
639
|
+
static VALUE t_connect_server (VALUE self UNUSED, VALUE server, VALUE port)
|
499
640
|
{
|
500
641
|
// Avoid FIX2INT in this case, because it doesn't deal with type errors properly.
|
501
642
|
// Specifically, if the value of port comes in as a string rather than an integer,
|
502
643
|
// NUM2INT will throw a type error, but FIX2INT will generate garbage.
|
503
644
|
|
504
645
|
try {
|
505
|
-
const
|
646
|
+
const uintptr_t f = evma_connect_to_server (NULL, 0, StringValueCStr(server), NUM2INT(port));
|
506
647
|
if (!f)
|
507
648
|
rb_raise (EM_eConnectionError, "%s", "no connection");
|
508
|
-
return
|
649
|
+
return BSIG2NUM (f);
|
509
650
|
} catch (std::runtime_error e) {
|
510
651
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
511
652
|
}
|
@@ -516,17 +657,17 @@ static VALUE t_connect_server (VALUE self, VALUE server, VALUE port)
|
|
516
657
|
t_bind_connect_server
|
517
658
|
*********************/
|
518
659
|
|
519
|
-
static VALUE t_bind_connect_server (VALUE self, VALUE bind_addr, VALUE bind_port, VALUE server, VALUE port)
|
660
|
+
static VALUE t_bind_connect_server (VALUE self UNUSED, VALUE bind_addr, VALUE bind_port, VALUE server, VALUE port)
|
520
661
|
{
|
521
662
|
// Avoid FIX2INT in this case, because it doesn't deal with type errors properly.
|
522
663
|
// Specifically, if the value of port comes in as a string rather than an integer,
|
523
664
|
// NUM2INT will throw a type error, but FIX2INT will generate garbage.
|
524
665
|
|
525
666
|
try {
|
526
|
-
const
|
667
|
+
const uintptr_t f = evma_connect_to_server (StringValueCStr(bind_addr), NUM2INT(bind_port), StringValueCStr(server), NUM2INT(port));
|
527
668
|
if (!f)
|
528
669
|
rb_raise (EM_eConnectionError, "%s", "no connection");
|
529
|
-
return
|
670
|
+
return BSIG2NUM (f);
|
530
671
|
} catch (std::runtime_error e) {
|
531
672
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
532
673
|
}
|
@@ -537,42 +678,50 @@ static VALUE t_bind_connect_server (VALUE self, VALUE bind_addr, VALUE bind_port
|
|
537
678
|
t_connect_unix_server
|
538
679
|
*********************/
|
539
680
|
|
540
|
-
static VALUE t_connect_unix_server (VALUE self, VALUE serversocket)
|
681
|
+
static VALUE t_connect_unix_server (VALUE self UNUSED, VALUE serversocket)
|
541
682
|
{
|
542
|
-
const
|
683
|
+
const uintptr_t f = evma_connect_to_unix_server (StringValueCStr(serversocket));
|
543
684
|
if (!f)
|
544
685
|
rb_raise (rb_eRuntimeError, "%s", "no connection");
|
545
|
-
return
|
686
|
+
return BSIG2NUM (f);
|
546
687
|
}
|
547
688
|
|
548
689
|
/***********
|
549
690
|
t_attach_fd
|
550
691
|
***********/
|
551
692
|
|
552
|
-
static VALUE t_attach_fd (VALUE self, VALUE file_descriptor, VALUE watch_mode)
|
693
|
+
static VALUE t_attach_fd (VALUE self UNUSED, VALUE file_descriptor, VALUE watch_mode)
|
553
694
|
{
|
554
|
-
const
|
695
|
+
const uintptr_t f = evma_attach_fd (NUM2INT(file_descriptor), watch_mode == Qtrue);
|
555
696
|
if (!f)
|
556
697
|
rb_raise (rb_eRuntimeError, "%s", "no connection");
|
557
|
-
return
|
698
|
+
return BSIG2NUM (f);
|
558
699
|
}
|
559
700
|
|
560
701
|
/***********
|
561
702
|
t_detach_fd
|
562
703
|
***********/
|
563
704
|
|
564
|
-
static VALUE t_detach_fd (VALUE self, VALUE signature)
|
705
|
+
static VALUE t_detach_fd (VALUE self UNUSED, VALUE signature)
|
706
|
+
{
|
707
|
+
return INT2NUM(evma_detach_fd (NUM2BSIG (signature)));
|
708
|
+
}
|
709
|
+
|
710
|
+
/*********************
|
711
|
+
t_get_file_descriptor
|
712
|
+
*********************/
|
713
|
+
static VALUE t_get_file_descriptor (VALUE self UNUSED, VALUE signature)
|
565
714
|
{
|
566
|
-
return INT2NUM(
|
715
|
+
return INT2NUM(evma_get_file_descriptor (NUM2BSIG (signature)));
|
567
716
|
}
|
568
717
|
|
569
718
|
/**************
|
570
719
|
t_get_sock_opt
|
571
720
|
**************/
|
572
721
|
|
573
|
-
static VALUE t_get_sock_opt (VALUE self, VALUE signature, VALUE lev, VALUE optname)
|
722
|
+
static VALUE t_get_sock_opt (VALUE self UNUSED, VALUE signature, VALUE lev, VALUE optname)
|
574
723
|
{
|
575
|
-
int fd = evma_get_file_descriptor (
|
724
|
+
int fd = evma_get_file_descriptor (NUM2BSIG (signature));
|
576
725
|
int level = NUM2INT(lev), option = NUM2INT(optname);
|
577
726
|
socklen_t len = 128;
|
578
727
|
char buf[128];
|
@@ -587,12 +736,12 @@ static VALUE t_get_sock_opt (VALUE self, VALUE signature, VALUE lev, VALUE optna
|
|
587
736
|
t_set_sock_opt
|
588
737
|
**************/
|
589
738
|
|
590
|
-
static VALUE t_set_sock_opt (VALUE self, VALUE signature, VALUE lev, VALUE optname, VALUE optval)
|
739
|
+
static VALUE t_set_sock_opt (VALUE self UNUSED, VALUE signature, VALUE lev, VALUE optname, VALUE optval)
|
591
740
|
{
|
592
|
-
int fd = evma_get_file_descriptor (
|
741
|
+
int fd = evma_get_file_descriptor (NUM2BSIG (signature));
|
593
742
|
int level = NUM2INT(lev), option = NUM2INT(optname);
|
594
743
|
int i;
|
595
|
-
void *v;
|
744
|
+
const void *v;
|
596
745
|
socklen_t len;
|
597
746
|
|
598
747
|
switch (TYPE(optval)) {
|
@@ -625,18 +774,18 @@ static VALUE t_set_sock_opt (VALUE self, VALUE signature, VALUE lev, VALUE optna
|
|
625
774
|
t_is_notify_readable
|
626
775
|
********************/
|
627
776
|
|
628
|
-
static VALUE t_is_notify_readable (VALUE self, VALUE signature)
|
777
|
+
static VALUE t_is_notify_readable (VALUE self UNUSED, VALUE signature)
|
629
778
|
{
|
630
|
-
return evma_is_notify_readable(
|
779
|
+
return evma_is_notify_readable(NUM2BSIG (signature)) ? Qtrue : Qfalse;
|
631
780
|
}
|
632
781
|
|
633
782
|
/*********************
|
634
783
|
t_set_notify_readable
|
635
784
|
*********************/
|
636
785
|
|
637
|
-
static VALUE t_set_notify_readable (VALUE self, VALUE signature, VALUE mode)
|
786
|
+
static VALUE t_set_notify_readable (VALUE self UNUSED, VALUE signature, VALUE mode)
|
638
787
|
{
|
639
|
-
evma_set_notify_readable(
|
788
|
+
evma_set_notify_readable(NUM2BSIG(signature), mode == Qtrue);
|
640
789
|
return Qnil;
|
641
790
|
}
|
642
791
|
|
@@ -644,18 +793,18 @@ static VALUE t_set_notify_readable (VALUE self, VALUE signature, VALUE mode)
|
|
644
793
|
t_is_notify_readable
|
645
794
|
********************/
|
646
795
|
|
647
|
-
static VALUE t_is_notify_writable (VALUE self, VALUE signature)
|
796
|
+
static VALUE t_is_notify_writable (VALUE self UNUSED, VALUE signature)
|
648
797
|
{
|
649
|
-
return evma_is_notify_writable(
|
798
|
+
return evma_is_notify_writable(NUM2BSIG (signature)) ? Qtrue : Qfalse;
|
650
799
|
}
|
651
800
|
|
652
801
|
/*********************
|
653
802
|
t_set_notify_writable
|
654
803
|
*********************/
|
655
804
|
|
656
|
-
static VALUE t_set_notify_writable (VALUE self, VALUE signature, VALUE mode)
|
805
|
+
static VALUE t_set_notify_writable (VALUE self UNUSED, VALUE signature, VALUE mode)
|
657
806
|
{
|
658
|
-
evma_set_notify_writable(
|
807
|
+
evma_set_notify_writable(NUM2BSIG (signature), mode == Qtrue);
|
659
808
|
return Qnil;
|
660
809
|
}
|
661
810
|
|
@@ -663,34 +812,34 @@ static VALUE t_set_notify_writable (VALUE self, VALUE signature, VALUE mode)
|
|
663
812
|
t_pause
|
664
813
|
*******/
|
665
814
|
|
666
|
-
static VALUE t_pause (VALUE self, VALUE signature)
|
815
|
+
static VALUE t_pause (VALUE self UNUSED, VALUE signature)
|
667
816
|
{
|
668
|
-
return evma_pause(
|
817
|
+
return evma_pause(NUM2BSIG (signature)) ? Qtrue : Qfalse;
|
669
818
|
}
|
670
819
|
|
671
820
|
/********
|
672
821
|
t_resume
|
673
822
|
********/
|
674
823
|
|
675
|
-
static VALUE t_resume (VALUE self, VALUE signature)
|
824
|
+
static VALUE t_resume (VALUE self UNUSED, VALUE signature)
|
676
825
|
{
|
677
|
-
return evma_resume(
|
826
|
+
return evma_resume(NUM2BSIG (signature)) ? Qtrue : Qfalse;
|
678
827
|
}
|
679
828
|
|
680
829
|
/**********
|
681
830
|
t_paused_p
|
682
831
|
**********/
|
683
832
|
|
684
|
-
static VALUE t_paused_p (VALUE self, VALUE signature)
|
833
|
+
static VALUE t_paused_p (VALUE self UNUSED, VALUE signature)
|
685
834
|
{
|
686
|
-
return evma_is_paused(
|
835
|
+
return evma_is_paused(NUM2BSIG (signature)) ? Qtrue : Qfalse;
|
687
836
|
}
|
688
837
|
|
689
838
|
/*********************
|
690
839
|
t_num_close_scheduled
|
691
840
|
*********************/
|
692
841
|
|
693
|
-
static VALUE t_num_close_scheduled (VALUE self)
|
842
|
+
static VALUE t_num_close_scheduled (VALUE self UNUSED)
|
694
843
|
{
|
695
844
|
return INT2FIX(evma_num_close_scheduled());
|
696
845
|
}
|
@@ -699,12 +848,12 @@ static VALUE t_num_close_scheduled (VALUE self)
|
|
699
848
|
t_open_udp_socket
|
700
849
|
*****************/
|
701
850
|
|
702
|
-
static VALUE t_open_udp_socket (VALUE self, VALUE server, VALUE port)
|
851
|
+
static VALUE t_open_udp_socket (VALUE self UNUSED, VALUE server, VALUE port)
|
703
852
|
{
|
704
|
-
const
|
853
|
+
const uintptr_t f = evma_open_datagram_socket (StringValueCStr(server), FIX2INT(port));
|
705
854
|
if (!f)
|
706
855
|
rb_raise (rb_eRuntimeError, "%s", "no datagram socket");
|
707
|
-
return
|
856
|
+
return BSIG2NUM(f);
|
708
857
|
}
|
709
858
|
|
710
859
|
|
@@ -713,7 +862,7 @@ static VALUE t_open_udp_socket (VALUE self, VALUE server, VALUE port)
|
|
713
862
|
t_release_machine
|
714
863
|
*****************/
|
715
864
|
|
716
|
-
static VALUE t_release_machine (VALUE self)
|
865
|
+
static VALUE t_release_machine (VALUE self UNUSED)
|
717
866
|
{
|
718
867
|
evma_release_library();
|
719
868
|
return Qnil;
|
@@ -724,7 +873,7 @@ static VALUE t_release_machine (VALUE self)
|
|
724
873
|
t_stop
|
725
874
|
******/
|
726
875
|
|
727
|
-
static VALUE t_stop (VALUE self)
|
876
|
+
static VALUE t_stop (VALUE self UNUSED)
|
728
877
|
{
|
729
878
|
evma_stop_machine();
|
730
879
|
return Qnil;
|
@@ -734,7 +883,7 @@ static VALUE t_stop (VALUE self)
|
|
734
883
|
t_signal_loopbreak
|
735
884
|
******************/
|
736
885
|
|
737
|
-
static VALUE t_signal_loopbreak (VALUE self)
|
886
|
+
static VALUE t_signal_loopbreak (VALUE self UNUSED)
|
738
887
|
{
|
739
888
|
evma_signal_loopbreak();
|
740
889
|
return Qnil;
|
@@ -744,7 +893,7 @@ static VALUE t_signal_loopbreak (VALUE self)
|
|
744
893
|
t_library_type
|
745
894
|
**************/
|
746
895
|
|
747
|
-
static VALUE t_library_type (VALUE self)
|
896
|
+
static VALUE t_library_type (VALUE self UNUSED)
|
748
897
|
{
|
749
898
|
return rb_eval_string (":extension");
|
750
899
|
}
|
@@ -755,39 +904,54 @@ static VALUE t_library_type (VALUE self)
|
|
755
904
|
t_set_timer_quantum
|
756
905
|
*******************/
|
757
906
|
|
758
|
-
static VALUE t_set_timer_quantum (VALUE self, VALUE interval)
|
907
|
+
static VALUE t_set_timer_quantum (VALUE self UNUSED, VALUE interval)
|
759
908
|
{
|
760
|
-
|
761
|
-
|
909
|
+
evma_set_timer_quantum (FIX2INT (interval));
|
910
|
+
return Qnil;
|
762
911
|
}
|
763
912
|
|
764
913
|
/********************
|
765
914
|
t_get_max_timer_count
|
766
915
|
********************/
|
767
916
|
|
768
|
-
static VALUE t_get_max_timer_count (VALUE self)
|
917
|
+
static VALUE t_get_max_timer_count (VALUE self UNUSED)
|
769
918
|
{
|
770
|
-
|
919
|
+
return INT2FIX (evma_get_max_timer_count());
|
771
920
|
}
|
772
921
|
|
773
922
|
/********************
|
774
923
|
t_set_max_timer_count
|
775
924
|
********************/
|
776
925
|
|
777
|
-
static VALUE t_set_max_timer_count (VALUE self, VALUE ct)
|
926
|
+
static VALUE t_set_max_timer_count (VALUE self UNUSED, VALUE ct)
|
778
927
|
{
|
779
|
-
|
780
|
-
|
928
|
+
evma_set_max_timer_count (FIX2INT (ct));
|
929
|
+
return Qnil;
|
930
|
+
}
|
931
|
+
|
932
|
+
/********************
|
933
|
+
t_get/set_simultaneous_accept_count
|
934
|
+
********************/
|
935
|
+
|
936
|
+
static VALUE t_get_simultaneous_accept_count (VALUE self UNUSED)
|
937
|
+
{
|
938
|
+
return INT2FIX (evma_get_simultaneous_accept_count());
|
939
|
+
}
|
940
|
+
|
941
|
+
static VALUE t_set_simultaneous_accept_count (VALUE self UNUSED, VALUE ct)
|
942
|
+
{
|
943
|
+
evma_set_simultaneous_accept_count (FIX2INT (ct));
|
944
|
+
return Qnil;
|
781
945
|
}
|
782
946
|
|
783
947
|
/***************
|
784
948
|
t_setuid_string
|
785
949
|
***************/
|
786
950
|
|
787
|
-
static VALUE t_setuid_string (VALUE self, VALUE username)
|
951
|
+
static VALUE t_setuid_string (VALUE self UNUSED, VALUE username)
|
788
952
|
{
|
789
|
-
|
790
|
-
|
953
|
+
evma_setuid_string (StringValueCStr (username));
|
954
|
+
return Qnil;
|
791
955
|
}
|
792
956
|
|
793
957
|
|
@@ -796,25 +960,29 @@ static VALUE t_setuid_string (VALUE self, VALUE username)
|
|
796
960
|
t_invoke_popen
|
797
961
|
**************/
|
798
962
|
|
799
|
-
static VALUE t_invoke_popen (VALUE self, VALUE cmd)
|
963
|
+
static VALUE t_invoke_popen (VALUE self UNUSED, VALUE cmd)
|
800
964
|
{
|
801
|
-
|
802
|
-
|
803
|
-
int len = RARRAY_LEN(cmd);
|
804
|
-
#else
|
805
|
-
int len = RARRAY (cmd)->len;
|
965
|
+
#ifdef OS_WIN32
|
966
|
+
rb_raise (EM_eUnsupported, "popen is not available on this platform");
|
806
967
|
#endif
|
968
|
+
|
969
|
+
int len = RARRAY_LEN(cmd);
|
807
970
|
if (len >= 2048)
|
808
971
|
rb_raise (rb_eRuntimeError, "%s", "too many arguments to popen");
|
809
972
|
char *strings [2048];
|
810
973
|
for (int i=0; i < len; i++) {
|
811
974
|
VALUE ix = INT2FIX (i);
|
812
975
|
VALUE s = rb_ary_aref (1, &ix, cmd);
|
813
|
-
strings[i] =
|
976
|
+
strings[i] = StringValueCStr (s);
|
814
977
|
}
|
815
978
|
strings[len] = NULL;
|
816
979
|
|
817
|
-
|
980
|
+
uintptr_t f = 0;
|
981
|
+
try {
|
982
|
+
f = evma_popen (strings);
|
983
|
+
} catch (std::runtime_error e) {
|
984
|
+
rb_raise (rb_eRuntimeError, "%s", e.what());
|
985
|
+
}
|
818
986
|
if (!f) {
|
819
987
|
char *err = strerror (errno);
|
820
988
|
char buf[100];
|
@@ -822,7 +990,7 @@ static VALUE t_invoke_popen (VALUE self, VALUE cmd)
|
|
822
990
|
snprintf (buf, sizeof(buf)-1, "no popen: %s", (err?err:"???"));
|
823
991
|
rb_raise (rb_eRuntimeError, "%s", buf);
|
824
992
|
}
|
825
|
-
return
|
993
|
+
return BSIG2NUM (f);
|
826
994
|
}
|
827
995
|
|
828
996
|
|
@@ -830,12 +998,12 @@ static VALUE t_invoke_popen (VALUE self, VALUE cmd)
|
|
830
998
|
t_read_keyboard
|
831
999
|
***************/
|
832
1000
|
|
833
|
-
static VALUE t_read_keyboard (VALUE self)
|
1001
|
+
static VALUE t_read_keyboard (VALUE self UNUSED)
|
834
1002
|
{
|
835
|
-
const
|
1003
|
+
const uintptr_t f = evma_open_keyboard();
|
836
1004
|
if (!f)
|
837
1005
|
rb_raise (rb_eRuntimeError, "%s", "no keyboard reader");
|
838
|
-
return
|
1006
|
+
return BSIG2NUM (f);
|
839
1007
|
}
|
840
1008
|
|
841
1009
|
|
@@ -843,10 +1011,10 @@ static VALUE t_read_keyboard (VALUE self)
|
|
843
1011
|
t_watch_filename
|
844
1012
|
****************/
|
845
1013
|
|
846
|
-
static VALUE t_watch_filename (VALUE self, VALUE fname)
|
1014
|
+
static VALUE t_watch_filename (VALUE self UNUSED, VALUE fname)
|
847
1015
|
{
|
848
1016
|
try {
|
849
|
-
return
|
1017
|
+
return BSIG2NUM(evma_watch_filename(StringValueCStr(fname)));
|
850
1018
|
} catch (std::runtime_error e) {
|
851
1019
|
rb_raise (EM_eUnsupported, "%s", e.what());
|
852
1020
|
}
|
@@ -858,9 +1026,9 @@ static VALUE t_watch_filename (VALUE self, VALUE fname)
|
|
858
1026
|
t_unwatch_filename
|
859
1027
|
******************/
|
860
1028
|
|
861
|
-
static VALUE t_unwatch_filename (VALUE self, VALUE sig)
|
1029
|
+
static VALUE t_unwatch_filename (VALUE self UNUSED, VALUE sig)
|
862
1030
|
{
|
863
|
-
evma_unwatch_filename(
|
1031
|
+
evma_unwatch_filename(NUM2BSIG (sig));
|
864
1032
|
return Qnil;
|
865
1033
|
}
|
866
1034
|
|
@@ -869,10 +1037,10 @@ static VALUE t_unwatch_filename (VALUE self, VALUE sig)
|
|
869
1037
|
t_watch_pid
|
870
1038
|
***********/
|
871
1039
|
|
872
|
-
static VALUE t_watch_pid (VALUE self, VALUE pid)
|
1040
|
+
static VALUE t_watch_pid (VALUE self UNUSED, VALUE pid)
|
873
1041
|
{
|
874
1042
|
try {
|
875
|
-
return
|
1043
|
+
return BSIG2NUM(evma_watch_pid(NUM2INT(pid)));
|
876
1044
|
} catch (std::runtime_error e) {
|
877
1045
|
rb_raise (EM_eUnsupported, "%s", e.what());
|
878
1046
|
}
|
@@ -884,9 +1052,9 @@ static VALUE t_watch_pid (VALUE self, VALUE pid)
|
|
884
1052
|
t_unwatch_pid
|
885
1053
|
*************/
|
886
1054
|
|
887
|
-
static VALUE t_unwatch_pid (VALUE self, VALUE sig)
|
1055
|
+
static VALUE t_unwatch_pid (VALUE self UNUSED, VALUE sig)
|
888
1056
|
{
|
889
|
-
evma_unwatch_pid(
|
1057
|
+
evma_unwatch_pid(NUM2BSIG (sig));
|
890
1058
|
return Qnil;
|
891
1059
|
}
|
892
1060
|
|
@@ -895,21 +1063,24 @@ static VALUE t_unwatch_pid (VALUE self, VALUE sig)
|
|
895
1063
|
t__epoll_p
|
896
1064
|
**********/
|
897
1065
|
|
898
|
-
static VALUE t__epoll_p (VALUE self)
|
1066
|
+
static VALUE t__epoll_p (VALUE self UNUSED)
|
899
1067
|
{
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
1068
|
+
#ifdef HAVE_EPOLL
|
1069
|
+
return Qtrue;
|
1070
|
+
#else
|
1071
|
+
return Qfalse;
|
1072
|
+
#endif
|
905
1073
|
}
|
906
1074
|
|
907
1075
|
/********
|
908
1076
|
t__epoll
|
909
1077
|
********/
|
910
1078
|
|
911
|
-
static VALUE t__epoll (VALUE self)
|
1079
|
+
static VALUE t__epoll (VALUE self UNUSED)
|
912
1080
|
{
|
1081
|
+
if (t__epoll_p(self) == Qfalse)
|
1082
|
+
return Qfalse;
|
1083
|
+
|
913
1084
|
evma_set_epoll (1);
|
914
1085
|
return Qtrue;
|
915
1086
|
}
|
@@ -920,7 +1091,7 @@ t__epoll_set
|
|
920
1091
|
|
921
1092
|
static VALUE t__epoll_set (VALUE self, VALUE val)
|
922
1093
|
{
|
923
|
-
if (t__epoll_p(self) == Qfalse)
|
1094
|
+
if (t__epoll_p(self) == Qfalse && val == Qtrue)
|
924
1095
|
rb_raise (EM_eUnsupported, "%s", "epoll is not supported on this platform");
|
925
1096
|
|
926
1097
|
evma_set_epoll (val == Qtrue ? 1 : 0);
|
@@ -932,21 +1103,24 @@ static VALUE t__epoll_set (VALUE self, VALUE val)
|
|
932
1103
|
t__kqueue_p
|
933
1104
|
***********/
|
934
1105
|
|
935
|
-
static VALUE t__kqueue_p (VALUE self)
|
1106
|
+
static VALUE t__kqueue_p (VALUE self UNUSED)
|
936
1107
|
{
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
1108
|
+
#ifdef HAVE_KQUEUE
|
1109
|
+
return Qtrue;
|
1110
|
+
#else
|
1111
|
+
return Qfalse;
|
1112
|
+
#endif
|
942
1113
|
}
|
943
1114
|
|
944
1115
|
/*********
|
945
1116
|
t__kqueue
|
946
1117
|
*********/
|
947
1118
|
|
948
|
-
static VALUE t__kqueue (VALUE self)
|
1119
|
+
static VALUE t__kqueue (VALUE self UNUSED)
|
949
1120
|
{
|
1121
|
+
if (t__kqueue_p(self) == Qfalse)
|
1122
|
+
return Qfalse;
|
1123
|
+
|
950
1124
|
evma_set_kqueue (1);
|
951
1125
|
return Qtrue;
|
952
1126
|
}
|
@@ -957,7 +1131,7 @@ t__kqueue_set
|
|
957
1131
|
|
958
1132
|
static VALUE t__kqueue_set (VALUE self, VALUE val)
|
959
1133
|
{
|
960
|
-
if (t__kqueue_p(self) == Qfalse)
|
1134
|
+
if (t__kqueue_p(self) == Qfalse && val == Qtrue)
|
961
1135
|
rb_raise (EM_eUnsupported, "%s", "kqueue is not supported on this platform");
|
962
1136
|
|
963
1137
|
evma_set_kqueue (val == Qtrue ? 1 : 0);
|
@@ -969,13 +1143,30 @@ static VALUE t__kqueue_set (VALUE self, VALUE val)
|
|
969
1143
|
t__ssl_p
|
970
1144
|
********/
|
971
1145
|
|
972
|
-
static VALUE t__ssl_p (VALUE self)
|
1146
|
+
static VALUE t__ssl_p (VALUE self UNUSED)
|
1147
|
+
{
|
1148
|
+
#ifdef WITH_SSL
|
1149
|
+
return Qtrue;
|
1150
|
+
#else
|
1151
|
+
return Qfalse;
|
1152
|
+
#endif
|
1153
|
+
}
|
1154
|
+
|
1155
|
+
/********
|
1156
|
+
t_stopping
|
1157
|
+
********/
|
1158
|
+
|
1159
|
+
static VALUE t_stopping ()
|
973
1160
|
{
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
1161
|
+
if (evma_stopping())
|
1162
|
+
{
|
1163
|
+
return Qtrue;
|
1164
|
+
}
|
1165
|
+
else
|
1166
|
+
{
|
1167
|
+
return Qfalse;
|
1168
|
+
}
|
1169
|
+
|
979
1170
|
}
|
980
1171
|
|
981
1172
|
|
@@ -983,7 +1174,7 @@ static VALUE t__ssl_p (VALUE self)
|
|
983
1174
|
t_send_file_data
|
984
1175
|
****************/
|
985
1176
|
|
986
|
-
static VALUE t_send_file_data (VALUE self, VALUE signature, VALUE filename)
|
1177
|
+
static VALUE t_send_file_data (VALUE self UNUSED, VALUE signature, VALUE filename)
|
987
1178
|
{
|
988
1179
|
|
989
1180
|
/* The current implementation of evma_send_file_data_to_connection enforces a strict
|
@@ -994,14 +1185,14 @@ static VALUE t_send_file_data (VALUE self, VALUE signature, VALUE filename)
|
|
994
1185
|
* do this. For one thing it's ugly. For another, we can't be sure zero is never a real errno.
|
995
1186
|
*/
|
996
1187
|
|
997
|
-
int b = evma_send_file_data_to_connection (
|
1188
|
+
int b = evma_send_file_data_to_connection (NUM2BSIG (signature), StringValueCStr(filename));
|
998
1189
|
if (b == -1)
|
999
1190
|
rb_raise(rb_eRuntimeError, "%s", "File too large. send_file_data() supports files under 32k.");
|
1000
1191
|
if (b > 0) {
|
1001
1192
|
char *err = strerror (b);
|
1002
1193
|
char buf[1024];
|
1003
1194
|
memset (buf, 0, sizeof(buf));
|
1004
|
-
snprintf (buf, sizeof(buf)-1, ": %s %s",
|
1195
|
+
snprintf (buf, sizeof(buf)-1, ": %s %s", StringValueCStr(filename),(err?err:"???"));
|
1005
1196
|
|
1006
1197
|
rb_raise (rb_eIOError, "%s", buf);
|
1007
1198
|
}
|
@@ -1014,7 +1205,7 @@ static VALUE t_send_file_data (VALUE self, VALUE signature, VALUE filename)
|
|
1014
1205
|
t_set_rlimit_nofile
|
1015
1206
|
*******************/
|
1016
1207
|
|
1017
|
-
static VALUE t_set_rlimit_nofile (VALUE self, VALUE arg)
|
1208
|
+
static VALUE t_set_rlimit_nofile (VALUE self UNUSED, VALUE arg)
|
1018
1209
|
{
|
1019
1210
|
arg = (NIL_P(arg)) ? -1 : NUM2INT (arg);
|
1020
1211
|
return INT2NUM (evma_set_rlimit_nofile (arg));
|
@@ -1027,7 +1218,7 @@ conn_get_outbound_data_size
|
|
1027
1218
|
static VALUE conn_get_outbound_data_size (VALUE self)
|
1028
1219
|
{
|
1029
1220
|
VALUE sig = rb_ivar_get (self, Intern_at_signature);
|
1030
|
-
return INT2NUM (evma_get_outbound_data_size (
|
1221
|
+
return INT2NUM (evma_get_outbound_data_size (NUM2BSIG (sig)));
|
1031
1222
|
}
|
1032
1223
|
|
1033
1224
|
|
@@ -1035,7 +1226,7 @@ static VALUE conn_get_outbound_data_size (VALUE self)
|
|
1035
1226
|
conn_associate_callback_target
|
1036
1227
|
******************************/
|
1037
1228
|
|
1038
|
-
static VALUE conn_associate_callback_target (VALUE self, VALUE sig)
|
1229
|
+
static VALUE conn_associate_callback_target (VALUE self UNUSED, VALUE sig UNUSED)
|
1039
1230
|
{
|
1040
1231
|
// No-op for the time being.
|
1041
1232
|
return Qnil;
|
@@ -1046,22 +1237,19 @@ static VALUE conn_associate_callback_target (VALUE self, VALUE sig)
|
|
1046
1237
|
t_get_loop_time
|
1047
1238
|
****************/
|
1048
1239
|
|
1049
|
-
static VALUE t_get_loop_time (VALUE self)
|
1240
|
+
static VALUE t_get_loop_time (VALUE self UNUSED)
|
1050
1241
|
{
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1242
|
+
uint64_t current_time = evma_get_current_loop_time();
|
1243
|
+
if (current_time == 0) {
|
1244
|
+
return Qnil;
|
1245
|
+
}
|
1055
1246
|
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
#endif
|
1063
|
-
}
|
1064
|
-
return Qnil;
|
1247
|
+
// Generally the industry has moved to 64-bit time_t, this is just in case we're 32-bit time_t.
|
1248
|
+
if (sizeof(time_t) < 8 && current_time > INT_MAX) {
|
1249
|
+
return rb_funcall(rb_cTime, Intern_at, 2, INT2NUM(current_time / 1000000), INT2NUM(current_time % 1000000));
|
1250
|
+
} else {
|
1251
|
+
return rb_time_new(current_time / 1000000, current_time % 1000000);
|
1252
|
+
}
|
1065
1253
|
}
|
1066
1254
|
|
1067
1255
|
|
@@ -1069,10 +1257,10 @@ static VALUE t_get_loop_time (VALUE self)
|
|
1069
1257
|
t_start_proxy
|
1070
1258
|
**************/
|
1071
1259
|
|
1072
|
-
static VALUE t_start_proxy (VALUE self, VALUE from, VALUE to, VALUE bufsize, VALUE length)
|
1260
|
+
static VALUE t_start_proxy (VALUE self UNUSED, VALUE from, VALUE to, VALUE bufsize, VALUE length)
|
1073
1261
|
{
|
1074
1262
|
try {
|
1075
|
-
evma_start_proxy(
|
1263
|
+
evma_start_proxy(NUM2BSIG (from), NUM2BSIG (to), NUM2ULONG(bufsize), NUM2ULONG(length));
|
1076
1264
|
} catch (std::runtime_error e) {
|
1077
1265
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
1078
1266
|
}
|
@@ -1084,10 +1272,10 @@ static VALUE t_start_proxy (VALUE self, VALUE from, VALUE to, VALUE bufsize, VAL
|
|
1084
1272
|
t_stop_proxy
|
1085
1273
|
*************/
|
1086
1274
|
|
1087
|
-
static VALUE t_stop_proxy (VALUE self, VALUE from)
|
1275
|
+
static VALUE t_stop_proxy (VALUE self UNUSED, VALUE from)
|
1088
1276
|
{
|
1089
1277
|
try{
|
1090
|
-
evma_stop_proxy(
|
1278
|
+
evma_stop_proxy(NUM2BSIG (from));
|
1091
1279
|
} catch (std::runtime_error e) {
|
1092
1280
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
1093
1281
|
}
|
@@ -1098,10 +1286,10 @@ static VALUE t_stop_proxy (VALUE self, VALUE from)
|
|
1098
1286
|
t_proxied_bytes
|
1099
1287
|
****************/
|
1100
1288
|
|
1101
|
-
static VALUE t_proxied_bytes (VALUE self, VALUE from)
|
1289
|
+
static VALUE t_proxied_bytes (VALUE self UNUSED, VALUE from)
|
1102
1290
|
{
|
1103
1291
|
try{
|
1104
|
-
return
|
1292
|
+
return BSIG2NUM(evma_proxied_bytes(NUM2BSIG (from)));
|
1105
1293
|
} catch (std::runtime_error e) {
|
1106
1294
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
1107
1295
|
}
|
@@ -1112,14 +1300,14 @@ static VALUE t_proxied_bytes (VALUE self, VALUE from)
|
|
1112
1300
|
t_get_idle_time
|
1113
1301
|
****************/
|
1114
1302
|
|
1115
|
-
static VALUE t_get_idle_time (VALUE self, VALUE from)
|
1303
|
+
static VALUE t_get_idle_time (VALUE self UNUSED, VALUE from)
|
1116
1304
|
{
|
1117
1305
|
try{
|
1118
1306
|
uint64_t current_time = evma_get_current_loop_time();
|
1119
|
-
uint64_t time = evma_get_last_activity_time(
|
1307
|
+
uint64_t time = evma_get_last_activity_time(NUM2BSIG (from));
|
1120
1308
|
if (current_time != 0 && time != 0) {
|
1121
1309
|
if (time >= current_time)
|
1122
|
-
return
|
1310
|
+
return BSIG2NUM(0);
|
1123
1311
|
else {
|
1124
1312
|
uint64_t diff = current_time - time;
|
1125
1313
|
float seconds = diff / (1000.0*1000.0);
|
@@ -1137,7 +1325,7 @@ static VALUE t_get_idle_time (VALUE self, VALUE from)
|
|
1137
1325
|
t_get_heartbeat_interval
|
1138
1326
|
*************************/
|
1139
1327
|
|
1140
|
-
static VALUE t_get_heartbeat_interval (VALUE self)
|
1328
|
+
static VALUE t_get_heartbeat_interval (VALUE self UNUSED)
|
1141
1329
|
{
|
1142
1330
|
return rb_float_new(evma_get_heartbeat_interval());
|
1143
1331
|
}
|
@@ -1147,7 +1335,7 @@ static VALUE t_get_heartbeat_interval (VALUE self)
|
|
1147
1335
|
t_set_heartbeat_interval
|
1148
1336
|
*************************/
|
1149
1337
|
|
1150
|
-
static VALUE t_set_heartbeat_interval (VALUE self, VALUE interval)
|
1338
|
+
static VALUE t_set_heartbeat_interval (VALUE self UNUSED, VALUE interval)
|
1151
1339
|
{
|
1152
1340
|
float iv = RFLOAT_VALUE(interval);
|
1153
1341
|
if (evma_set_heartbeat_interval(iv))
|
@@ -1176,6 +1364,7 @@ extern "C" void Init_rubyeventmachine()
|
|
1176
1364
|
Intern_run_deferred_callbacks = rb_intern ("run_deferred_callbacks");
|
1177
1365
|
Intern_delete = rb_intern ("delete");
|
1178
1366
|
Intern_call = rb_intern ("call");
|
1367
|
+
Intern_at = rb_intern("at");
|
1179
1368
|
Intern_receive_data = rb_intern ("receive_data");
|
1180
1369
|
Intern_ssl_handshake_completed = rb_intern ("ssl_handshake_completed");
|
1181
1370
|
Intern_ssl_verify_peer = rb_intern ("ssl_verify_peer");
|
@@ -1198,15 +1387,21 @@ extern "C" void Init_rubyeventmachine()
|
|
1198
1387
|
EM_eUnsupported = rb_define_class_under (EmModule, "Unsupported", rb_eRuntimeError);
|
1199
1388
|
|
1200
1389
|
rb_define_module_function (EmModule, "initialize_event_machine", (VALUE(*)(...))t_initialize_event_machine, 0);
|
1201
|
-
rb_define_module_function (EmModule, "
|
1202
|
-
rb_define_module_function (EmModule, "
|
1390
|
+
rb_define_module_function (EmModule, "run_machine_once", (VALUE(*)(...))t_run_machine_once, 0);
|
1391
|
+
rb_define_module_function (EmModule, "run_machine", (VALUE(*)(...))t_run_machine, 0);
|
1392
|
+
rb_define_module_function (EmModule, "run_machine_without_threads", (VALUE(*)(...))t_run_machine, 0);
|
1203
1393
|
rb_define_module_function (EmModule, "add_oneshot_timer", (VALUE(*)(...))t_add_oneshot_timer, 1);
|
1204
1394
|
rb_define_module_function (EmModule, "start_tcp_server", (VALUE(*)(...))t_start_server, 2);
|
1205
1395
|
rb_define_module_function (EmModule, "stop_tcp_server", (VALUE(*)(...))t_stop_server, 1);
|
1206
1396
|
rb_define_module_function (EmModule, "start_unix_server", (VALUE(*)(...))t_start_unix_server, 1);
|
1207
|
-
rb_define_module_function (EmModule, "
|
1397
|
+
rb_define_module_function (EmModule, "attach_sd", (VALUE(*)(...))t_attach_sd, 1);
|
1398
|
+
rb_define_module_function (EmModule, "set_tls_parms", (VALUE(*)(...))t_set_tls_parms, 10);
|
1208
1399
|
rb_define_module_function (EmModule, "start_tls", (VALUE(*)(...))t_start_tls, 1);
|
1209
1400
|
rb_define_module_function (EmModule, "get_peer_cert", (VALUE(*)(...))t_get_peer_cert, 1);
|
1401
|
+
rb_define_module_function (EmModule, "get_cipher_bits", (VALUE(*)(...))t_get_cipher_bits, 1);
|
1402
|
+
rb_define_module_function (EmModule, "get_cipher_name", (VALUE(*)(...))t_get_cipher_name, 1);
|
1403
|
+
rb_define_module_function (EmModule, "get_cipher_protocol", (VALUE(*)(...))t_get_cipher_protocol, 1);
|
1404
|
+
rb_define_module_function (EmModule, "get_sni_hostname", (VALUE(*)(...))t_get_sni_hostname, 1);
|
1210
1405
|
rb_define_module_function (EmModule, "send_data", (VALUE(*)(...))t_send_data, 3);
|
1211
1406
|
rb_define_module_function (EmModule, "send_datagram", (VALUE(*)(...))t_send_datagram, 5);
|
1212
1407
|
rb_define_module_function (EmModule, "close_connection", (VALUE(*)(...))t_close_connection, 2);
|
@@ -1217,6 +1412,7 @@ extern "C" void Init_rubyeventmachine()
|
|
1217
1412
|
|
1218
1413
|
rb_define_module_function (EmModule, "attach_fd", (VALUE (*)(...))t_attach_fd, 2);
|
1219
1414
|
rb_define_module_function (EmModule, "detach_fd", (VALUE (*)(...))t_detach_fd, 1);
|
1415
|
+
rb_define_module_function (EmModule, "get_file_descriptor", (VALUE (*)(...))t_get_file_descriptor, 1);
|
1220
1416
|
rb_define_module_function (EmModule, "get_sock_opt", (VALUE (*)(...))t_get_sock_opt, 3);
|
1221
1417
|
rb_define_module_function (EmModule, "set_sock_opt", (VALUE (*)(...))t_set_sock_opt, 4);
|
1222
1418
|
rb_define_module_function (EmModule, "set_notify_readable", (VALUE (*)(...))t_set_notify_readable, 2);
|
@@ -1250,6 +1446,8 @@ extern "C" void Init_rubyeventmachine()
|
|
1250
1446
|
rb_define_module_function (EmModule, "set_timer_quantum", (VALUE(*)(...))t_set_timer_quantum, 1);
|
1251
1447
|
rb_define_module_function (EmModule, "get_max_timer_count", (VALUE(*)(...))t_get_max_timer_count, 0);
|
1252
1448
|
rb_define_module_function (EmModule, "set_max_timer_count", (VALUE(*)(...))t_set_max_timer_count, 1);
|
1449
|
+
rb_define_module_function (EmModule, "get_simultaneous_accept_count", (VALUE(*)(...))t_get_simultaneous_accept_count, 0);
|
1450
|
+
rb_define_module_function (EmModule, "set_simultaneous_accept_count", (VALUE(*)(...))t_set_simultaneous_accept_count, 1);
|
1253
1451
|
rb_define_module_function (EmModule, "setuid_string", (VALUE(*)(...))t_setuid_string, 1);
|
1254
1452
|
rb_define_module_function (EmModule, "invoke_popen", (VALUE(*)(...))t_invoke_popen, 1);
|
1255
1453
|
rb_define_module_function (EmModule, "send_file_data", (VALUE(*)(...))t_send_file_data, 2);
|
@@ -1277,21 +1475,30 @@ extern "C" void Init_rubyeventmachine()
|
|
1277
1475
|
rb_define_module_function (EmModule, "kqueue?", (VALUE(*)(...))t__kqueue_p, 0);
|
1278
1476
|
|
1279
1477
|
rb_define_module_function (EmModule, "ssl?", (VALUE(*)(...))t__ssl_p, 0);
|
1478
|
+
rb_define_module_function(EmModule, "stopping?",(VALUE(*)(...))t_stopping, 0);
|
1280
1479
|
|
1281
1480
|
rb_define_method (EmConnection, "get_outbound_data_size", (VALUE(*)(...))conn_get_outbound_data_size, 0);
|
1282
1481
|
rb_define_method (EmConnection, "associate_callback_target", (VALUE(*)(...))conn_associate_callback_target, 1);
|
1283
1482
|
|
1284
|
-
|
1285
|
-
rb_define_const (EmModule, "
|
1286
|
-
rb_define_const (EmModule, "
|
1287
|
-
rb_define_const (EmModule, "
|
1288
|
-
rb_define_const (EmModule, "
|
1289
|
-
rb_define_const (EmModule, "
|
1290
|
-
|
1291
|
-
rb_define_const (EmModule, "ConnectionNotifyReadable", INT2NUM(
|
1292
|
-
rb_define_const (EmModule, "ConnectionNotifyWritable", INT2NUM(
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1483
|
+
// Connection states
|
1484
|
+
rb_define_const (EmModule, "TimerFired", INT2NUM(EM_TIMER_FIRED ));
|
1485
|
+
rb_define_const (EmModule, "ConnectionData", INT2NUM(EM_CONNECTION_READ ));
|
1486
|
+
rb_define_const (EmModule, "ConnectionUnbound", INT2NUM(EM_CONNECTION_UNBOUND ));
|
1487
|
+
rb_define_const (EmModule, "ConnectionAccepted", INT2NUM(EM_CONNECTION_ACCEPTED ));
|
1488
|
+
rb_define_const (EmModule, "ConnectionCompleted", INT2NUM(EM_CONNECTION_COMPLETED ));
|
1489
|
+
rb_define_const (EmModule, "LoopbreakSignalled", INT2NUM(EM_LOOPBREAK_SIGNAL ));
|
1490
|
+
rb_define_const (EmModule, "ConnectionNotifyReadable", INT2NUM(EM_CONNECTION_NOTIFY_READABLE));
|
1491
|
+
rb_define_const (EmModule, "ConnectionNotifyWritable", INT2NUM(EM_CONNECTION_NOTIFY_WRITABLE));
|
1492
|
+
rb_define_const (EmModule, "SslHandshakeCompleted", INT2NUM(EM_SSL_HANDSHAKE_COMPLETED ));
|
1493
|
+
// EM_SSL_VERIFY = 109,
|
1494
|
+
// EM_PROXY_TARGET_UNBOUND = 110,
|
1495
|
+
// EM_PROXY_COMPLETED = 111
|
1496
|
+
|
1497
|
+
// SSL Protocols
|
1498
|
+
rb_define_const (EmModule, "EM_PROTO_SSLv2", INT2NUM(EM_PROTO_SSLv2 ));
|
1499
|
+
rb_define_const (EmModule, "EM_PROTO_SSLv3", INT2NUM(EM_PROTO_SSLv3 ));
|
1500
|
+
rb_define_const (EmModule, "EM_PROTO_TLSv1", INT2NUM(EM_PROTO_TLSv1 ));
|
1501
|
+
rb_define_const (EmModule, "EM_PROTO_TLSv1_1", INT2NUM(EM_PROTO_TLSv1_1));
|
1502
|
+
rb_define_const (EmModule, "EM_PROTO_TLSv1_2", INT2NUM(EM_PROTO_TLSv1_2));
|
1296
1503
|
}
|
1297
1504
|
|