eventmachine-eventmachine 0.12.7 → 0.12.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/{docs/README → README} +21 -13
  2. data/Rakefile +14 -4
  3. data/docs/DEFERRABLES +0 -5
  4. data/docs/INSTALL +2 -4
  5. data/docs/LEGAL +1 -1
  6. data/docs/LIGHTWEIGHT_CONCURRENCY +0 -2
  7. data/docs/PURE_RUBY +0 -2
  8. data/docs/RELEASE_NOTES +0 -2
  9. data/docs/SMTP +0 -7
  10. data/docs/SPAWNED_PROCESSES +0 -4
  11. data/docs/TODO +0 -2
  12. data/eventmachine.gemspec +17 -8
  13. data/examples/ex_channel.rb +43 -0
  14. data/examples/ex_queue.rb +2 -0
  15. data/examples/helper.rb +2 -0
  16. data/ext/cmain.cpp +119 -20
  17. data/ext/cplusplus.cpp +15 -6
  18. data/ext/ed.cpp +303 -93
  19. data/ext/ed.h +49 -22
  20. data/ext/em.cpp +368 -42
  21. data/ext/em.h +43 -6
  22. data/ext/eventmachine.h +21 -8
  23. data/ext/eventmachine_cpp.h +1 -0
  24. data/ext/extconf.rb +4 -0
  25. data/ext/kb.cpp +1 -2
  26. data/ext/pipe.cpp +1 -3
  27. data/ext/project.h +21 -0
  28. data/ext/rubymain.cpp +232 -32
  29. data/ext/ssl.cpp +38 -1
  30. data/ext/ssl.h +5 -1
  31. data/java/src/com/rubyeventmachine/Application.java +7 -3
  32. data/java/src/com/rubyeventmachine/EmReactor.java +16 -1
  33. data/java/src/com/rubyeventmachine/tests/ConnectTest.java +25 -3
  34. data/lib/{protocols → em}/buftok.rb +16 -5
  35. data/lib/em/callback.rb +26 -0
  36. data/lib/em/channel.rb +57 -0
  37. data/lib/em/connection.rb +505 -0
  38. data/lib/em/deferrable.rb +144 -165
  39. data/lib/em/file_watch.rb +54 -0
  40. data/lib/em/future.rb +24 -25
  41. data/lib/em/messages.rb +1 -1
  42. data/lib/em/process_watch.rb +44 -0
  43. data/lib/em/processes.rb +58 -52
  44. data/lib/em/protocols/header_and_content.rb +138 -0
  45. data/lib/em/protocols/httpclient.rb +263 -0
  46. data/lib/em/protocols/httpclient2.rb +582 -0
  47. data/lib/{protocols → em/protocols}/line_and_text.rb +2 -2
  48. data/lib/em/protocols/linetext2.rb +160 -0
  49. data/lib/{protocols → em/protocols}/memcache.rb +37 -7
  50. data/lib/em/protocols/object_protocol.rb +39 -0
  51. data/lib/em/protocols/postgres3.rb +247 -0
  52. data/lib/em/protocols/saslauth.rb +175 -0
  53. data/lib/em/protocols/smtpclient.rb +331 -0
  54. data/lib/em/protocols/smtpserver.rb +547 -0
  55. data/lib/em/protocols/stomp.rb +200 -0
  56. data/lib/{protocols → em/protocols}/tcptest.rb +21 -25
  57. data/lib/em/protocols.rb +35 -0
  58. data/lib/em/queue.rb +61 -0
  59. data/lib/em/spawnable.rb +53 -56
  60. data/lib/em/streamer.rb +92 -74
  61. data/lib/em/timers.rb +55 -0
  62. data/lib/em/version.rb +3 -0
  63. data/lib/eventmachine.rb +1008 -1298
  64. data/lib/evma.rb +1 -1
  65. data/lib/jeventmachine.rb +106 -101
  66. data/lib/pr_eventmachine.rb +47 -36
  67. data/tasks/project.rake +2 -1
  68. data/tests/client.crt +31 -0
  69. data/tests/client.key +51 -0
  70. data/tests/test_attach.rb +18 -0
  71. data/tests/test_basic.rb +108 -54
  72. data/tests/test_channel.rb +63 -0
  73. data/tests/test_connection_count.rb +2 -2
  74. data/tests/test_epoll.rb +109 -110
  75. data/tests/test_errors.rb +36 -36
  76. data/tests/test_exc.rb +22 -25
  77. data/tests/test_file_watch.rb +49 -0
  78. data/tests/test_futures.rb +77 -93
  79. data/tests/test_hc.rb +2 -2
  80. data/tests/test_httpclient.rb +55 -52
  81. data/tests/test_httpclient2.rb +110 -112
  82. data/tests/test_inactivity_timeout.rb +30 -0
  83. data/tests/test_kb.rb +8 -9
  84. data/tests/test_ltp2.rb +274 -277
  85. data/tests/test_next_tick.rb +91 -65
  86. data/tests/test_object_protocol.rb +37 -0
  87. data/tests/test_process_watch.rb +48 -0
  88. data/tests/test_processes.rb +56 -23
  89. data/tests/test_proxy_connection.rb +92 -0
  90. data/tests/test_pure.rb +1 -5
  91. data/tests/test_queue.rb +44 -0
  92. data/tests/test_running.rb +9 -14
  93. data/tests/test_sasl.rb +32 -34
  94. data/tests/test_send_file.rb +175 -176
  95. data/tests/test_servers.rb +37 -41
  96. data/tests/test_smtpserver.rb +47 -55
  97. data/tests/test_spawn.rb +284 -291
  98. data/tests/test_ssl_args.rb +1 -1
  99. data/tests/test_ssl_methods.rb +1 -1
  100. data/tests/test_ssl_verify.rb +82 -0
  101. data/tests/test_timers.rb +81 -88
  102. data/tests/test_ud.rb +0 -7
  103. data/tests/testem.rb +1 -1
  104. metadata +53 -37
  105. data/lib/em/eventable.rb +0 -39
  106. data/lib/eventmachine_version.rb +0 -31
  107. data/lib/protocols/header_and_content.rb +0 -129
  108. data/lib/protocols/httpcli2.rb +0 -803
  109. data/lib/protocols/httpclient.rb +0 -270
  110. data/lib/protocols/linetext2.rb +0 -161
  111. data/lib/protocols/postgres.rb +0 -261
  112. data/lib/protocols/saslauth.rb +0 -179
  113. data/lib/protocols/smtpclient.rb +0 -308
  114. data/lib/protocols/smtpserver.rb +0 -556
  115. data/lib/protocols/stomp.rb +0 -153
  116. data/tests/test_eventables.rb +0 -77
data/ext/ed.h CHANGED
@@ -67,27 +67,28 @@ class EventableDescriptor: public Bindable_t
67
67
  virtual bool GetSubprocessPid (pid_t*) {return false;}
68
68
 
69
69
  virtual void StartTls() {}
70
- virtual void SetTlsParms (const char *privkey_filename, const char *certchain_filename) {}
70
+ virtual void SetTlsParms (const char *privkey_filename, const char *certchain_filename, bool verify_peer) {}
71
71
 
72
72
  #ifdef WITH_SSL
73
73
  virtual X509 *GetPeerCert() {return NULL;}
74
74
  #endif
75
75
 
76
- // Properties: return 0/1 to signify T/F, and handle the values
77
- // through arguments.
78
- virtual int GetCommInactivityTimeout (int *value) {return 0;}
79
- virtual int SetCommInactivityTimeout (int *value) {return 0;}
76
+ virtual float GetCommInactivityTimeout() {return 0.0;}
77
+ virtual int SetCommInactivityTimeout (float value) {return 0;}
80
78
 
81
79
  #ifdef HAVE_EPOLL
82
80
  struct epoll_event *GetEpollEvent() { return &EpollEvent; }
83
81
  #endif
84
82
 
83
+ virtual void StartProxy(const char*);
84
+ virtual void StopProxy();
85
+
85
86
  private:
86
87
  bool bCloseNow;
87
88
  bool bCloseAfterWriting;
88
- int MySocket;
89
89
 
90
90
  protected:
91
+ int MySocket;
91
92
  enum {
92
93
  // 4 seconds is too short, most other libraries default to OS settings
93
94
  // which in 2.6 kernel defaults to a 60 second connect timeout.
@@ -96,16 +97,17 @@ class EventableDescriptor: public Bindable_t
96
97
  //
97
98
  // updating to 50 seconds, so we catch it before the OS does
98
99
 
99
- PendingConnectTimeout = 50 // can easily be made an instance variable
100
+ // can easily be made an instance variable
101
+ PendingConnectTimeout = 50000000 // now in usec
100
102
  };
101
103
 
102
104
  void (*EventCallback)(const char*, int, const char*, int);
103
-
104
- time_t CreatedAt;
105
- time_t LastRead;
106
- time_t LastWritten;
105
+ void _GenericInboundDispatch(const char*, int);
106
+
107
+ Int64 CreatedAt;
107
108
  bool bCallbackUnbind;
108
109
  int UnbindReasonCode;
110
+ char *ProxyTarget;
109
111
 
110
112
  #ifdef HAVE_EPOLL
111
113
  struct epoll_event EpollEvent;
@@ -153,8 +155,8 @@ class ConnectionDescriptor: public EventableDescriptor
153
155
 
154
156
  void SetConnectPending (bool f);
155
157
 
156
- void SetNotifyReadable (bool readable) { bNotifyReadable = readable; }
157
- void SetNotifyWritable (bool writable) { bNotifyWritable = writable; }
158
+ void SetNotifyReadable (bool);
159
+ void SetNotifyWritable (bool);
158
160
 
159
161
  virtual void Read();
160
162
  virtual void Write();
@@ -167,10 +169,12 @@ class ConnectionDescriptor: public EventableDescriptor
167
169
  virtual int GetOutboundDataSize() {return OutboundDataSize;}
168
170
 
169
171
  virtual void StartTls();
170
- virtual void SetTlsParms (const char *privkey_filename, const char *certchain_filename);
172
+ virtual void SetTlsParms (const char *privkey_filename, const char *certchain_filename, bool verify_peer);
171
173
 
172
174
  #ifdef WITH_SSL
173
175
  virtual X509 *GetPeerCert();
176
+ virtual bool VerifySslPeer(const char*);
177
+ virtual void AcceptSslPeer();
174
178
  #endif
175
179
 
176
180
  void SetServerMode() {bIsServer = true;}
@@ -178,8 +182,8 @@ class ConnectionDescriptor: public EventableDescriptor
178
182
  virtual bool GetPeername (struct sockaddr*);
179
183
  virtual bool GetSockname (struct sockaddr*);
180
184
 
181
- virtual int GetCommInactivityTimeout (int *value);
182
- virtual int SetCommInactivityTimeout (int *value);
185
+ virtual float GetCommInactivityTimeout();
186
+ virtual int SetCommInactivityTimeout (float value);
183
187
 
184
188
 
185
189
  protected:
@@ -208,10 +212,16 @@ class ConnectionDescriptor: public EventableDescriptor
208
212
  std::string CertChainFilename;
209
213
  std::string PrivateKeyFilename;
210
214
  bool bHandshakeSignaled;
215
+ bool bSslVerifyPeer;
216
+ bool bSslPeerAccepted;
211
217
  #endif
212
218
  bool bIsServer;
213
219
 
214
- time_t LastIo;
220
+ #ifdef HAVE_KQUEUE
221
+ bool bGotExtraKqueueEvent;
222
+ #endif
223
+
224
+ Int64 LastIo;
215
225
  int InactivityTimeout;
216
226
 
217
227
  private:
@@ -251,8 +261,8 @@ class DatagramDescriptor: public EventableDescriptor
251
261
  virtual bool GetPeername (struct sockaddr*);
252
262
  virtual bool GetSockname (struct sockaddr*);
253
263
 
254
- virtual int GetCommInactivityTimeout (int *value);
255
- virtual int SetCommInactivityTimeout (int *value);
264
+ virtual float GetCommInactivityTimeout();
265
+ virtual int SetCommInactivityTimeout (float value);
256
266
 
257
267
  static int SendDatagram (const char*, const char*, int, const char*, int);
258
268
 
@@ -272,7 +282,7 @@ class DatagramDescriptor: public EventableDescriptor
272
282
 
273
283
  struct sockaddr_in ReturnAddress;
274
284
 
275
- time_t LastIo;
285
+ Int64 LastIo;
276
286
  int InactivityTimeout;
277
287
  };
278
288
 
@@ -333,7 +343,7 @@ class PipeDescriptor: public EventableDescriptor
333
343
 
334
344
  protected:
335
345
  bool bReadAttemptedAfterClose;
336
- time_t LastIo;
346
+ Int64 LastIo;
337
347
  int InactivityTimeout;
338
348
 
339
349
  deque<OutboundPage> OutboundPages;
@@ -366,7 +376,7 @@ class KeyboardDescriptor: public EventableDescriptor
366
376
 
367
377
  protected:
368
378
  bool bReadAttemptedAfterClose;
369
- time_t LastIo;
379
+ Int64 LastIo;
370
380
  int InactivityTimeout;
371
381
 
372
382
  private:
@@ -374,6 +384,23 @@ class KeyboardDescriptor: public EventableDescriptor
374
384
  };
375
385
 
376
386
 
387
+ /***********************
388
+ class InotifyDescriptor
389
+ ************************/
390
+
391
+ class InotifyDescriptor: public EventableDescriptor
392
+ {
393
+ public:
394
+ InotifyDescriptor (EventMachine_t*);
395
+ virtual ~InotifyDescriptor();
396
+
397
+ void Read();
398
+ void Write();
399
+
400
+ virtual void Heartbeat() {}
401
+ virtual bool SelectForRead() {return true;}
402
+ virtual bool SelectForWrite() {return false;}
403
+ };
377
404
 
378
405
  #endif // __EventableDescriptor__H_
379
406