eventmachine 0.12.10-x86-mswin32-60 → 1.0.0.beta.2-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +1 -0
  3. data/README +80 -81
  4. data/Rakefile +7 -370
  5. data/docs/COPYING +60 -60
  6. data/docs/ChangeLog +211 -211
  7. data/docs/DEFERRABLES +246 -133
  8. data/docs/EPOLL +141 -141
  9. data/docs/GNU +281 -281
  10. data/docs/INSTALL +13 -13
  11. data/docs/KEYBOARD +42 -38
  12. data/docs/LEGAL +25 -25
  13. data/docs/LIGHTWEIGHT_CONCURRENCY +130 -70
  14. data/docs/PURE_RUBY +75 -75
  15. data/docs/RELEASE_NOTES +94 -94
  16. data/docs/SMTP +4 -2
  17. data/docs/SPAWNED_PROCESSES +148 -89
  18. data/docs/TODO +8 -8
  19. data/eventmachine.gemspec +19 -26
  20. data/examples/ex_channel.rb +42 -42
  21. data/examples/ex_queue.rb +2 -2
  22. data/examples/ex_tick_loop_array.rb +15 -0
  23. data/examples/ex_tick_loop_counter.rb +32 -0
  24. data/examples/helper.rb +1 -1
  25. data/ext/binder.cpp +0 -1
  26. data/ext/cmain.cpp +36 -25
  27. data/ext/ed.cpp +104 -113
  28. data/ext/ed.h +24 -30
  29. data/ext/em.cpp +349 -283
  30. data/ext/em.h +25 -29
  31. data/ext/eventmachine.h +5 -4
  32. data/ext/extconf.rb +58 -49
  33. data/ext/fastfilereader/extconf.rb +5 -3
  34. data/ext/fastfilereader/mapper.cpp +214 -214
  35. data/ext/fastfilereader/mapper.h +59 -59
  36. data/ext/fastfilereader/rubymain.cpp +127 -127
  37. data/ext/kb.cpp +1 -3
  38. data/ext/page.cpp +107 -107
  39. data/ext/page.h +51 -51
  40. data/ext/pipe.cpp +9 -11
  41. data/ext/project.h +12 -8
  42. data/ext/rubymain.cpp +138 -104
  43. data/java/.classpath +8 -8
  44. data/java/.project +17 -17
  45. data/java/src/com/rubyeventmachine/EmReactor.java +1 -0
  46. data/java/src/com/rubyeventmachine/EmReactorException.java +40 -40
  47. data/lib/em/buftok.rb +138 -138
  48. data/lib/em/callback.rb +25 -25
  49. data/lib/em/channel.rb +1 -1
  50. data/lib/em/connection.rb +6 -1
  51. data/lib/em/deferrable.rb +16 -2
  52. data/lib/em/file_watch.rb +53 -53
  53. data/lib/em/future.rb +61 -61
  54. data/lib/em/iterator.rb +270 -0
  55. data/lib/em/messages.rb +66 -66
  56. data/lib/em/process_watch.rb +43 -43
  57. data/lib/em/protocols.rb +1 -1
  58. data/lib/em/protocols/header_and_content.rb +138 -138
  59. data/lib/em/protocols/httpclient.rb +267 -262
  60. data/lib/em/protocols/line_protocol.rb +28 -0
  61. data/lib/em/protocols/memcache.rb +322 -322
  62. data/lib/em/protocols/postgres3.rb +247 -247
  63. data/lib/em/protocols/saslauth.rb +175 -175
  64. data/lib/em/protocols/smtpserver.rb +640 -547
  65. data/lib/em/protocols/stomp.rb +200 -200
  66. data/lib/em/protocols/tcptest.rb +52 -52
  67. data/lib/{pr_eventmachine.rb → em/pure_ruby.rb} +1013 -1022
  68. data/lib/em/queue.rb +1 -0
  69. data/lib/em/spawnable.rb +85 -85
  70. data/lib/em/streamer.rb +130 -130
  71. data/lib/em/tick_loop.rb +85 -0
  72. data/lib/em/timers.rb +2 -1
  73. data/lib/em/version.rb +1 -1
  74. data/lib/eventmachine.rb +40 -84
  75. data/lib/jeventmachine.rb +2 -1
  76. data/lib/rubyeventmachine.rb +2 -0
  77. data/setup.rb +1585 -1585
  78. data/tasks/doc.rake +30 -0
  79. data/tasks/package.rake +85 -0
  80. data/tasks/test.rake +6 -0
  81. data/tests/client.crt +31 -31
  82. data/tests/client.key +51 -51
  83. data/tests/test_attach.rb +13 -3
  84. data/tests/test_basic.rb +60 -95
  85. data/tests/test_channel.rb +3 -2
  86. data/tests/test_defer.rb +49 -47
  87. data/tests/test_deferrable.rb +35 -0
  88. data/tests/test_error_handler.rb +35 -35
  89. data/tests/test_errors.rb +82 -82
  90. data/tests/test_exc.rb +55 -55
  91. data/tests/test_file_watch.rb +49 -49
  92. data/tests/test_futures.rb +198 -198
  93. data/tests/test_handler_check.rb +36 -36
  94. data/tests/test_hc.rb +190 -218
  95. data/tests/test_httpclient.rb +227 -218
  96. data/tests/test_httpclient2.rb +3 -2
  97. data/tests/test_inactivity_timeout.rb +3 -3
  98. data/tests/test_kb.rb +60 -60
  99. data/tests/test_ltp.rb +13 -5
  100. data/tests/test_ltp2.rb +317 -317
  101. data/tests/test_next_tick.rb +1 -1
  102. data/tests/test_object_protocol.rb +36 -36
  103. data/tests/test_pending_connect_timeout.rb +2 -2
  104. data/tests/test_process_watch.rb +50 -48
  105. data/tests/test_proxy_connection.rb +52 -0
  106. data/tests/test_pure.rb +134 -125
  107. data/tests/test_queue.rb +44 -44
  108. data/tests/test_running.rb +42 -42
  109. data/tests/test_sasl.rb +72 -72
  110. data/tests/test_send_file.rb +251 -242
  111. data/tests/test_servers.rb +76 -76
  112. data/tests/test_smtpclient.rb +83 -83
  113. data/tests/test_smtpserver.rb +85 -85
  114. data/tests/test_spawn.rb +322 -322
  115. data/tests/test_ssl_methods.rb +49 -49
  116. data/tests/test_ssl_verify.rb +82 -82
  117. data/tests/test_tick_loop.rb +59 -0
  118. data/tests/test_timers.rb +13 -15
  119. data/tests/test_ud.rb +36 -36
  120. data/tests/testem.rb +31 -31
  121. metadata +66 -51
  122. data/ext/cplusplus.cpp +0 -202
  123. data/ext/emwin.cpp +0 -300
  124. data/ext/emwin.h +0 -94
  125. data/ext/epoll.cpp +0 -26
  126. data/ext/epoll.h +0 -25
  127. data/ext/eventmachine_cpp.h +0 -96
  128. data/ext/files.cpp +0 -94
  129. data/ext/files.h +0 -65
  130. data/ext/sigs.cpp +0 -89
  131. data/ext/sigs.h +0 -32
  132. data/java/src/com/rubyeventmachine/application/Application.java +0 -194
  133. data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  134. data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  135. data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  136. data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  137. data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  138. data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  139. data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  140. data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  141. data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  142. data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  143. data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  144. data/lib/evma.rb +0 -32
  145. data/lib/evma/callback.rb +0 -32
  146. data/lib/evma/container.rb +0 -75
  147. data/lib/evma/factory.rb +0 -77
  148. data/lib/evma/protocol.rb +0 -87
  149. data/lib/evma/reactor.rb +0 -48
  150. data/web/whatis +0 -7
@@ -1,218 +1,227 @@
1
- # $Id$
2
- #
3
- # Author:: Francis Cianfrocca (gmail: blackhedd)
4
- # Homepage:: http://rubyeventmachine.com
5
- # Date:: 8 April 2006
6
- #
7
- # See EventMachine and EventMachine::Connection for documentation and
8
- # usage examples.
9
- #
10
- #----------------------------------------------------------------------------
11
- #
12
- # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
- # Gmail: blackhedd
14
- #
15
- # This program is free software; you can redistribute it and/or modify
16
- # it under the terms of either: 1) the GNU General Public License
17
- # as published by the Free Software Foundation; either version 2 of the
18
- # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
20
- # See the file COPYING for complete licensing information.
21
- #
22
- #---------------------------------------------------------------------------
23
- #
24
- #
25
- #
26
-
27
- $:.unshift "../lib"
28
- require 'eventmachine'
29
- require 'test/unit'
30
-
31
- class TestHttpClient < Test::Unit::TestCase
32
-
33
- Localhost = "127.0.0.1"
34
- Localport = 9801
35
-
36
- def setup
37
- end
38
-
39
- def teardown
40
- end
41
-
42
- #-------------------------------------
43
-
44
- def test_http_client
45
- ok = false
46
- EventMachine.run {
47
- c = EventMachine::Protocols::HttpClient.send :request, :host => "www.bayshorenetworks.com", :port => 80
48
- c.callback {
49
- ok = true
50
- EventMachine.stop
51
- }
52
- c.errback {EventMachine.stop} # necessary, otherwise a failure blocks the test suite forever.
53
- }
54
- assert ok
55
- end
56
-
57
- #-------------------------------------
58
-
59
- def test_http_client_1
60
- ok = false
61
- EventMachine.run {
62
- c = EventMachine::Protocols::HttpClient.send :request, :host => "www.bayshorenetworks.com", :port => 80
63
- c.callback {ok = true; EventMachine.stop}
64
- c.errback {EventMachine.stop}
65
- }
66
- assert ok
67
- end
68
-
69
- #-------------------------------------
70
-
71
- def test_http_client_2
72
- ok = false
73
- EventMachine.run {
74
- c = EventMachine::Protocols::HttpClient.send :request, :host => "www.bayshorenetworks.com", :port => 80
75
- c.callback {|result|
76
- ok = true;
77
- EventMachine.stop
78
- }
79
- c.errback {EventMachine.stop}
80
- }
81
- assert ok
82
- end
83
-
84
-
85
- #-----------------------------------------
86
-
87
- # Test a server that returns a page with a zero content-length.
88
- # This caused an early version of the HTTP client not to generate a response,
89
- # causing this test to hang. Observe, there was no problem with responses
90
- # lacking a content-length, just when the content-length was zero.
91
- #
92
- class EmptyContent < EventMachine::Connection
93
- def initialize *args
94
- super
95
- end
96
- def receive_data data
97
- send_data "HTTP/1.0 404 ...\r\nContent-length: 0\r\n\r\n"
98
- close_connection_after_writing
99
- end
100
- end
101
-
102
- def test_http_empty_content
103
- ok = false
104
- EventMachine.run {
105
- EventMachine.start_server "127.0.0.1", 9701, EmptyContent
106
- c = EventMachine::Protocols::HttpClient.send :request, :host => "127.0.0.1", :port => 9701
107
- c.callback {|result|
108
- ok = true
109
- EventMachine.stop
110
- }
111
- }
112
- assert ok
113
- end
114
-
115
-
116
- #---------------------------------------
117
-
118
- class PostContent < EventMachine::Protocols::LineAndTextProtocol
119
- def initialize *args
120
- super
121
- @lines = []
122
- end
123
- def receive_line line
124
- if line.length > 0
125
- @lines << line
126
- else
127
- process_headers
128
- end
129
- end
130
- def receive_binary_data data
131
- @post_content = data
132
- send_response
133
- end
134
- def process_headers
135
- if @lines.first =~ /\APOST ([^\s]+) HTTP\/1.1\Z/
136
- @uri = $1.dup
137
- else
138
- raise "bad request"
139
- end
140
-
141
- @lines.each {|line|
142
- if line =~ /\AContent-length:\s*(\d+)\Z/i
143
- @content_length = $1.dup.to_i
144
- elsif line =~ /\AContent-type:\s*(\d+)\Z/i
145
- @content_type = $1.dup
146
- end
147
- }
148
-
149
- raise "invalid content length" unless @content_length
150
- set_binary_mode @content_length
151
- end
152
- def send_response
153
- send_data "HTTP/1.1 200 ...\r\nConnection: close\r\nContent-length: 10\r\nContent-type: text/html\r\n\r\n0123456789"
154
- close_connection_after_writing
155
- end
156
- end
157
-
158
- # TODO, this is WRONG. The handler is asserting an HTTP 1.1 request, but the client
159
- # is sending a 1.0 request. Gotta fix the client
160
- def test_post
161
- response = nil
162
- EventMachine.run {
163
- EventMachine.start_server Localhost, Localport, PostContent
164
- EventMachine.add_timer(2) {raise "timed out"}
165
- c = EventMachine::Protocols::HttpClient.request(
166
- :host=>Localhost,
167
- :port=>Localport,
168
- :method=>:post,
169
- :request=>"/aaa",
170
- :content=>"XYZ",
171
- :content_type=>"text/plain"
172
- )
173
- c.callback {|r|
174
- response = r
175
- EventMachine.stop
176
- }
177
- }
178
-
179
- assert_equal( 200, response[:status] )
180
- assert_equal( "0123456789", response[:content] )
181
- end
182
-
183
-
184
- # TODO, need a more intelligent cookie tester.
185
- # In fact, this whole test-harness needs a beefier server implementation.
186
- def test_cookie
187
- ok = false
188
- EM.run {
189
- c = EM::Protocols::HttpClient.send :request, :host => "www.bayshorenetworks.com", :port => 80, :cookie=>"aaa=bbb"
190
- c.callback {|result|
191
- ok = true;
192
- EventMachine.stop
193
- }
194
- c.errback {EventMachine.stop}
195
- }
196
- assert ok
197
- end
198
-
199
- # We can tell the client to send an HTTP/1.0 request (default is 1.1).
200
- # This is useful for suppressing chunked responses until those are working.
201
- def test_version_1_0
202
- ok = false
203
- EM.run {
204
- c = EM::P::HttpClient.request(
205
- :host => "www.bayshorenetworks.com",
206
- :port => 80,
207
- :version => "1.0"
208
- )
209
- c.callback {|result|
210
- ok = true;
211
- EventMachine.stop
212
- }
213
- c.errback {EventMachine.stop}
214
- }
215
- assert ok
216
- end
217
-
218
- end
1
+ # $Id$
2
+ #
3
+ # Author:: Francis Cianfrocca (gmail: blackhedd)
4
+ # Homepage:: http://rubyeventmachine.com
5
+ # Date:: 8 April 2006
6
+ #
7
+ # See EventMachine and EventMachine::Connection for documentation and
8
+ # usage examples.
9
+ #
10
+ #----------------------------------------------------------------------------
11
+ #
12
+ # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
+ # Gmail: blackhedd
14
+ #
15
+ # This program is free software; you can redistribute it and/or modify
16
+ # it under the terms of either: 1) the GNU General Public License
17
+ # as published by the Free Software Foundation; either version 2 of the
18
+ # License, or (at your option) any later version; or 2) Ruby's License.
19
+ #
20
+ # See the file COPYING for complete licensing information.
21
+ #
22
+ #---------------------------------------------------------------------------
23
+ #
24
+ #
25
+ #
26
+
27
+ $:.unshift "../lib"
28
+ require 'eventmachine'
29
+ require 'test/unit'
30
+
31
+ class TestHttpClient < Test::Unit::TestCase
32
+
33
+ Localhost = "127.0.0.1"
34
+ Localport = 9801
35
+
36
+ def setup
37
+ end
38
+
39
+ def teardown
40
+ end
41
+
42
+ #-------------------------------------
43
+
44
+ def test_http_client
45
+ ok = false
46
+ EventMachine.run {
47
+ c = EventMachine::Protocols::HttpClient.send :request, :host => "www.google.com", :port => 80
48
+ c.callback {
49
+ ok = true
50
+ EventMachine.stop
51
+ }
52
+ c.errback {EventMachine.stop} # necessary, otherwise a failure blocks the test suite forever.
53
+ }
54
+ assert ok
55
+ end
56
+
57
+ #-------------------------------------
58
+
59
+ def test_http_client_1
60
+ ok = false
61
+ EventMachine.run {
62
+ c = EventMachine::Protocols::HttpClient.send :request, :host => "www.google.com", :port => 80
63
+ c.callback {ok = true; EventMachine.stop}
64
+ c.errback {EventMachine.stop}
65
+ }
66
+ assert ok
67
+ end
68
+
69
+ #-------------------------------------
70
+
71
+ def test_http_client_2
72
+ ok = false
73
+ EventMachine.run {
74
+ c = EventMachine::Protocols::HttpClient.send :request, :host => "www.google.com", :port => 80
75
+ c.callback {|result|
76
+ ok = true;
77
+ EventMachine.stop
78
+ }
79
+ c.errback {EventMachine.stop}
80
+ }
81
+ assert ok
82
+ end
83
+
84
+
85
+ #-----------------------------------------
86
+
87
+ # Test a server that returns a page with a zero content-length.
88
+ # This caused an early version of the HTTP client not to generate a response,
89
+ # causing this test to hang. Observe, there was no problem with responses
90
+ # lacking a content-length, just when the content-length was zero.
91
+ #
92
+ class EmptyContent < EventMachine::Connection
93
+ def initialize *args
94
+ super
95
+ end
96
+ def receive_data data
97
+ send_data "HTTP/1.0 404 ...\r\nContent-length: 0\r\n\r\n"
98
+ close_connection_after_writing
99
+ end
100
+ end
101
+
102
+ def test_http_empty_content
103
+ ok = false
104
+ EventMachine.run {
105
+ EventMachine.start_server "127.0.0.1", 9701, EmptyContent
106
+ c = EventMachine::Protocols::HttpClient.send :request, :host => "127.0.0.1", :port => 9701
107
+ c.callback {|result|
108
+ ok = true
109
+ EventMachine.stop
110
+ }
111
+ }
112
+ assert ok
113
+ end
114
+
115
+
116
+ #---------------------------------------
117
+
118
+ class PostContent < EventMachine::Protocols::LineAndTextProtocol
119
+ def initialize *args
120
+ super
121
+ @lines = []
122
+ end
123
+ def receive_line line
124
+ if line.length > 0
125
+ @lines << line
126
+ else
127
+ process_headers
128
+ end
129
+ end
130
+ def receive_binary_data data
131
+ @post_content = data
132
+ send_response
133
+ end
134
+ def process_headers
135
+ if @lines.first =~ /\APOST ([^\s]+) HTTP\/1.1\Z/
136
+ @uri = $1.dup
137
+ else
138
+ raise "bad request"
139
+ end
140
+
141
+ @lines.each {|line|
142
+ if line =~ /\AContent-length:\s*(\d+)\Z/i
143
+ @content_length = $1.dup.to_i
144
+ elsif line =~ /\AContent-type:\s*(\d+)\Z/i
145
+ @content_type = $1.dup
146
+ end
147
+ }
148
+
149
+ raise "invalid content length" unless @content_length
150
+ set_binary_mode @content_length
151
+ end
152
+ def send_response
153
+ send_data "HTTP/1.1 200 ...\r\nConnection: close\r\nContent-length: 10\r\nContent-type: text/html\r\n\r\n0123456789"
154
+ close_connection_after_writing
155
+ end
156
+ end
157
+
158
+ def setup_timeout(timeout = 4)
159
+ EM.schedule {
160
+ start_time = EM.current_time
161
+ EM.add_periodic_timer(0.01) {
162
+ raise "timeout" if EM.current_time - start_time >= timeout
163
+ }
164
+ }
165
+ end
166
+
167
+ # TODO, this is WRONG. The handler is asserting an HTTP 1.1 request, but the client
168
+ # is sending a 1.0 request. Gotta fix the client
169
+ def test_post
170
+ response = nil
171
+ EventMachine.run {
172
+ EventMachine.start_server Localhost, Localport, PostContent
173
+ setup_timeout(2)
174
+ c = EventMachine::Protocols::HttpClient.request(
175
+ :host=>Localhost,
176
+ :port=>Localport,
177
+ :method=>:post,
178
+ :request=>"/aaa",
179
+ :content=>"XYZ",
180
+ :content_type=>"text/plain"
181
+ )
182
+ c.callback {|r|
183
+ response = r
184
+ EventMachine.stop
185
+ }
186
+ }
187
+
188
+ assert_equal( 200, response[:status] )
189
+ assert_equal( "0123456789", response[:content] )
190
+ end
191
+
192
+
193
+ # TODO, need a more intelligent cookie tester.
194
+ # In fact, this whole test-harness needs a beefier server implementation.
195
+ def test_cookie
196
+ ok = false
197
+ EM.run {
198
+ c = EM::Protocols::HttpClient.send :request, :host => "www.google.com", :port => 80, :cookie=>"aaa=bbb"
199
+ c.callback {|result|
200
+ ok = true;
201
+ EventMachine.stop
202
+ }
203
+ c.errback {EventMachine.stop}
204
+ }
205
+ assert ok
206
+ end
207
+
208
+ # We can tell the client to send an HTTP/1.0 request (default is 1.1).
209
+ # This is useful for suppressing chunked responses until those are working.
210
+ def test_version_1_0
211
+ ok = false
212
+ EM.run {
213
+ c = EM::P::HttpClient.request(
214
+ :host => "www.google.com",
215
+ :port => 80,
216
+ :version => "1.0"
217
+ )
218
+ c.callback {|result|
219
+ ok = true;
220
+ EventMachine.stop
221
+ }
222
+ c.errback {EventMachine.stop}
223
+ }
224
+ assert ok
225
+ end
226
+
227
+ end
@@ -121,7 +121,8 @@ class TestHttpClient2 < Test::Unit::TestCase
121
121
  e.callback {
122
122
  headers2 = e.headers
123
123
  }
124
- EM::Timer.new(1) {EM.stop}
124
+ EM.tick_loop { EM.stop if headers && headers2 }
125
+ EM.add_timer(1) { EM.stop }
125
126
  }
126
127
  assert(headers)
127
128
  assert(headers2)
@@ -141,7 +142,7 @@ class TestHttpClient2 < Test::Unit::TestCase
141
142
  def test_https_get
142
143
  d = nil
143
144
  EM.run {
144
- http = EM::P::HttpClient2.connect :host => 'www.amazon.com', :port => 443, :ssl => true
145
+ http = EM::P::HttpClient2.connect :host => 'www.apple.com', :port => 443, :ssl => true
145
146
  d = http.get "/"
146
147
  d.callback {
147
148
  EM.stop