sidekick-client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (247) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +52 -0
  6. data/VERSION +1 -0
  7. data/lib/ext/README +1 -0
  8. data/lib/ext/bunny-0.6.0/LICENSE +20 -0
  9. data/lib/ext/bunny-0.6.0/README.rdoc +66 -0
  10. data/lib/ext/bunny-0.6.0/Rakefile +24 -0
  11. data/lib/ext/bunny-0.6.0/bunny.gemspec +65 -0
  12. data/lib/ext/bunny-0.6.0/examples/simple_08.rb +30 -0
  13. data/lib/ext/bunny-0.6.0/examples/simple_09.rb +30 -0
  14. data/lib/ext/bunny-0.6.0/examples/simple_ack_08.rb +33 -0
  15. data/lib/ext/bunny-0.6.0/examples/simple_ack_09.rb +33 -0
  16. data/lib/ext/bunny-0.6.0/examples/simple_consumer_08.rb +53 -0
  17. data/lib/ext/bunny-0.6.0/examples/simple_consumer_09.rb +53 -0
  18. data/lib/ext/bunny-0.6.0/examples/simple_fanout_08.rb +39 -0
  19. data/lib/ext/bunny-0.6.0/examples/simple_fanout_09.rb +39 -0
  20. data/lib/ext/bunny-0.6.0/examples/simple_headers_08.rb +40 -0
  21. data/lib/ext/bunny-0.6.0/examples/simple_headers_09.rb +40 -0
  22. data/lib/ext/bunny-0.6.0/examples/simple_publisher_08.rb +27 -0
  23. data/lib/ext/bunny-0.6.0/examples/simple_publisher_09.rb +27 -0
  24. data/lib/ext/bunny-0.6.0/examples/simple_topic_08.rb +59 -0
  25. data/lib/ext/bunny-0.6.0/examples/simple_topic_09.rb +59 -0
  26. data/lib/ext/bunny-0.6.0/lib/bunny/channel08.rb +39 -0
  27. data/lib/ext/bunny-0.6.0/lib/bunny/channel09.rb +39 -0
  28. data/lib/ext/bunny-0.6.0/lib/bunny/client08.rb +494 -0
  29. data/lib/ext/bunny-0.6.0/lib/bunny/client09.rb +460 -0
  30. data/lib/ext/bunny-0.6.0/lib/bunny/exchange08.rb +175 -0
  31. data/lib/ext/bunny-0.6.0/lib/bunny/exchange09.rb +177 -0
  32. data/lib/ext/bunny-0.6.0/lib/bunny/queue08.rb +389 -0
  33. data/lib/ext/bunny-0.6.0/lib/bunny/queue09.rb +395 -0
  34. data/lib/ext/bunny-0.6.0/lib/bunny/subscription08.rb +85 -0
  35. data/lib/ext/bunny-0.6.0/lib/bunny/subscription09.rb +85 -0
  36. data/lib/ext/bunny-0.6.0/lib/bunny.rb +87 -0
  37. data/lib/ext/bunny-0.6.0/lib/qrack/channel.rb +18 -0
  38. data/lib/ext/bunny-0.6.0/lib/qrack/client.rb +204 -0
  39. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol08.rb +132 -0
  40. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/protocol09.rb +133 -0
  41. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec08.rb +823 -0
  42. data/lib/ext/bunny-0.6.0/lib/qrack/protocol/spec09.rb +521 -0
  43. data/lib/ext/bunny-0.6.0/lib/qrack/qrack08.rb +23 -0
  44. data/lib/ext/bunny-0.6.0/lib/qrack/qrack09.rb +23 -0
  45. data/lib/ext/bunny-0.6.0/lib/qrack/queue.rb +53 -0
  46. data/lib/ext/bunny-0.6.0/lib/qrack/subscription.rb +102 -0
  47. data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer08.rb +276 -0
  48. data/lib/ext/bunny-0.6.0/lib/qrack/transport/buffer09.rb +276 -0
  49. data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame08.rb +112 -0
  50. data/lib/ext/bunny-0.6.0/lib/qrack/transport/frame09.rb +94 -0
  51. data/lib/ext/bunny-0.6.0/spec/spec_08/bunny_spec.rb +65 -0
  52. data/lib/ext/bunny-0.6.0/spec/spec_08/connection_spec.rb +12 -0
  53. data/lib/ext/bunny-0.6.0/spec/spec_08/exchange_spec.rb +162 -0
  54. data/lib/ext/bunny-0.6.0/spec/spec_08/queue_spec.rb +206 -0
  55. data/lib/ext/bunny-0.6.0/spec/spec_09/bunny_spec.rb +65 -0
  56. data/lib/ext/bunny-0.6.0/spec/spec_09/connection_spec.rb +12 -0
  57. data/lib/ext/bunny-0.6.0/spec/spec_09/exchange_spec.rb +162 -0
  58. data/lib/ext/bunny-0.6.0/spec/spec_09/queue_spec.rb +205 -0
  59. data/lib/ext/eventmachine-0.12.10/.gitignore +14 -0
  60. data/lib/ext/eventmachine-0.12.10/README +82 -0
  61. data/lib/ext/eventmachine-0.12.10/Rakefile +374 -0
  62. data/lib/ext/eventmachine-0.12.10/docs/COPYING +60 -0
  63. data/lib/ext/eventmachine-0.12.10/docs/ChangeLog +211 -0
  64. data/lib/ext/eventmachine-0.12.10/docs/DEFERRABLES +133 -0
  65. data/lib/ext/eventmachine-0.12.10/docs/EPOLL +141 -0
  66. data/lib/ext/eventmachine-0.12.10/docs/GNU +281 -0
  67. data/lib/ext/eventmachine-0.12.10/docs/INSTALL +13 -0
  68. data/lib/ext/eventmachine-0.12.10/docs/KEYBOARD +38 -0
  69. data/lib/ext/eventmachine-0.12.10/docs/LEGAL +25 -0
  70. data/lib/ext/eventmachine-0.12.10/docs/LIGHTWEIGHT_CONCURRENCY +70 -0
  71. data/lib/ext/eventmachine-0.12.10/docs/PURE_RUBY +75 -0
  72. data/lib/ext/eventmachine-0.12.10/docs/RELEASE_NOTES +94 -0
  73. data/lib/ext/eventmachine-0.12.10/docs/SMTP +2 -0
  74. data/lib/ext/eventmachine-0.12.10/docs/SPAWNED_PROCESSES +89 -0
  75. data/lib/ext/eventmachine-0.12.10/docs/TODO +8 -0
  76. data/lib/ext/eventmachine-0.12.10/eventmachine.gemspec +40 -0
  77. data/lib/ext/eventmachine-0.12.10/examples/ex_channel.rb +43 -0
  78. data/lib/ext/eventmachine-0.12.10/examples/ex_queue.rb +2 -0
  79. data/lib/ext/eventmachine-0.12.10/examples/helper.rb +2 -0
  80. data/lib/ext/eventmachine-0.12.10/ext/binder.cpp +125 -0
  81. data/lib/ext/eventmachine-0.12.10/ext/binder.h +46 -0
  82. data/lib/ext/eventmachine-0.12.10/ext/cmain.cpp +827 -0
  83. data/lib/ext/eventmachine-0.12.10/ext/cplusplus.cpp +202 -0
  84. data/lib/ext/eventmachine-0.12.10/ext/ed.cpp +1893 -0
  85. data/lib/ext/eventmachine-0.12.10/ext/ed.h +424 -0
  86. data/lib/ext/eventmachine-0.12.10/ext/em.cpp +2282 -0
  87. data/lib/ext/eventmachine-0.12.10/ext/em.h +232 -0
  88. data/lib/ext/eventmachine-0.12.10/ext/emwin.cpp +300 -0
  89. data/lib/ext/eventmachine-0.12.10/ext/emwin.h +94 -0
  90. data/lib/ext/eventmachine-0.12.10/ext/epoll.cpp +26 -0
  91. data/lib/ext/eventmachine-0.12.10/ext/epoll.h +25 -0
  92. data/lib/ext/eventmachine-0.12.10/ext/eventmachine.h +122 -0
  93. data/lib/ext/eventmachine-0.12.10/ext/eventmachine_cpp.h +96 -0
  94. data/lib/ext/eventmachine-0.12.10/ext/extconf.rb +148 -0
  95. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/extconf.rb +83 -0
  96. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.cpp +214 -0
  97. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.h +59 -0
  98. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/rubymain.cpp +127 -0
  99. data/lib/ext/eventmachine-0.12.10/ext/files.cpp +94 -0
  100. data/lib/ext/eventmachine-0.12.10/ext/files.h +65 -0
  101. data/lib/ext/eventmachine-0.12.10/ext/kb.cpp +81 -0
  102. data/lib/ext/eventmachine-0.12.10/ext/page.cpp +107 -0
  103. data/lib/ext/eventmachine-0.12.10/ext/page.h +51 -0
  104. data/lib/ext/eventmachine-0.12.10/ext/pipe.cpp +349 -0
  105. data/lib/ext/eventmachine-0.12.10/ext/project.h +151 -0
  106. data/lib/ext/eventmachine-0.12.10/ext/rubymain.cpp +1166 -0
  107. data/lib/ext/eventmachine-0.12.10/ext/sigs.cpp +89 -0
  108. data/lib/ext/eventmachine-0.12.10/ext/sigs.h +32 -0
  109. data/lib/ext/eventmachine-0.12.10/ext/ssl.cpp +460 -0
  110. data/lib/ext/eventmachine-0.12.10/ext/ssl.h +94 -0
  111. data/lib/ext/eventmachine-0.12.10/java/.classpath +8 -0
  112. data/lib/ext/eventmachine-0.12.10/java/.project +17 -0
  113. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactor.java +570 -0
  114. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactorException.java +40 -0
  115. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableChannel.java +69 -0
  116. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableDatagramChannel.java +189 -0
  117. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableSocketChannel.java +364 -0
  118. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Application.java +194 -0
  119. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Connection.java +74 -0
  120. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/ConnectionFactory.java +37 -0
  121. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +46 -0
  122. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/PeriodicTimer.java +38 -0
  123. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Timer.java +54 -0
  124. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ApplicationTest.java +109 -0
  125. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ConnectTest.java +148 -0
  126. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/EMTest.java +80 -0
  127. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestDatagrams.java +53 -0
  128. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestServers.java +75 -0
  129. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestTimers.java +90 -0
  130. data/lib/ext/eventmachine-0.12.10/lib/em/buftok.rb +138 -0
  131. data/lib/ext/eventmachine-0.12.10/lib/em/callback.rb +26 -0
  132. data/lib/ext/eventmachine-0.12.10/lib/em/channel.rb +57 -0
  133. data/lib/ext/eventmachine-0.12.10/lib/em/connection.rb +564 -0
  134. data/lib/ext/eventmachine-0.12.10/lib/em/deferrable.rb +192 -0
  135. data/lib/ext/eventmachine-0.12.10/lib/em/file_watch.rb +54 -0
  136. data/lib/ext/eventmachine-0.12.10/lib/em/future.rb +61 -0
  137. data/lib/ext/eventmachine-0.12.10/lib/em/messages.rb +66 -0
  138. data/lib/ext/eventmachine-0.12.10/lib/em/process_watch.rb +44 -0
  139. data/lib/ext/eventmachine-0.12.10/lib/em/processes.rb +119 -0
  140. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/header_and_content.rb +138 -0
  141. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient.rb +263 -0
  142. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient2.rb +590 -0
  143. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/line_and_text.rb +125 -0
  144. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/linetext2.rb +161 -0
  145. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/memcache.rb +323 -0
  146. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/object_protocol.rb +45 -0
  147. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/postgres3.rb +247 -0
  148. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/saslauth.rb +175 -0
  149. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpclient.rb +357 -0
  150. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpserver.rb +547 -0
  151. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/socks4.rb +66 -0
  152. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/stomp.rb +200 -0
  153. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/tcptest.rb +53 -0
  154. data/lib/ext/eventmachine-0.12.10/lib/em/protocols.rb +36 -0
  155. data/lib/ext/eventmachine-0.12.10/lib/em/queue.rb +61 -0
  156. data/lib/ext/eventmachine-0.12.10/lib/em/spawnable.rb +85 -0
  157. data/lib/ext/eventmachine-0.12.10/lib/em/streamer.rb +130 -0
  158. data/lib/ext/eventmachine-0.12.10/lib/em/timers.rb +56 -0
  159. data/lib/ext/eventmachine-0.12.10/lib/em/version.rb +3 -0
  160. data/lib/ext/eventmachine-0.12.10/lib/eventmachine.rb +1592 -0
  161. data/lib/ext/eventmachine-0.12.10/lib/evma/callback.rb +32 -0
  162. data/lib/ext/eventmachine-0.12.10/lib/evma/container.rb +75 -0
  163. data/lib/ext/eventmachine-0.12.10/lib/evma/factory.rb +77 -0
  164. data/lib/ext/eventmachine-0.12.10/lib/evma/protocol.rb +87 -0
  165. data/lib/ext/eventmachine-0.12.10/lib/evma/reactor.rb +48 -0
  166. data/lib/ext/eventmachine-0.12.10/lib/evma.rb +32 -0
  167. data/lib/ext/eventmachine-0.12.10/lib/jeventmachine.rb +257 -0
  168. data/lib/ext/eventmachine-0.12.10/lib/pr_eventmachine.rb +1022 -0
  169. data/lib/ext/eventmachine-0.12.10/setup.rb +1585 -0
  170. data/lib/ext/eventmachine-0.12.10/tasks/cpp.rake_example +77 -0
  171. data/lib/ext/eventmachine-0.12.10/tests/client.crt +31 -0
  172. data/lib/ext/eventmachine-0.12.10/tests/client.key +51 -0
  173. data/lib/ext/eventmachine-0.12.10/tests/test_attach.rb +126 -0
  174. data/lib/ext/eventmachine-0.12.10/tests/test_basic.rb +284 -0
  175. data/lib/ext/eventmachine-0.12.10/tests/test_channel.rb +63 -0
  176. data/lib/ext/eventmachine-0.12.10/tests/test_connection_count.rb +35 -0
  177. data/lib/ext/eventmachine-0.12.10/tests/test_defer.rb +47 -0
  178. data/lib/ext/eventmachine-0.12.10/tests/test_epoll.rb +160 -0
  179. data/lib/ext/eventmachine-0.12.10/tests/test_error_handler.rb +35 -0
  180. data/lib/ext/eventmachine-0.12.10/tests/test_errors.rb +82 -0
  181. data/lib/ext/eventmachine-0.12.10/tests/test_exc.rb +55 -0
  182. data/lib/ext/eventmachine-0.12.10/tests/test_file_watch.rb +49 -0
  183. data/lib/ext/eventmachine-0.12.10/tests/test_futures.rb +198 -0
  184. data/lib/ext/eventmachine-0.12.10/tests/test_get_sock_opt.rb +30 -0
  185. data/lib/ext/eventmachine-0.12.10/tests/test_handler_check.rb +37 -0
  186. data/lib/ext/eventmachine-0.12.10/tests/test_hc.rb +218 -0
  187. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient.rb +218 -0
  188. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient2.rb +153 -0
  189. data/lib/ext/eventmachine-0.12.10/tests/test_inactivity_timeout.rb +50 -0
  190. data/lib/ext/eventmachine-0.12.10/tests/test_kb.rb +60 -0
  191. data/lib/ext/eventmachine-0.12.10/tests/test_ltp.rb +182 -0
  192. data/lib/ext/eventmachine-0.12.10/tests/test_ltp2.rb +317 -0
  193. data/lib/ext/eventmachine-0.12.10/tests/test_next_tick.rb +133 -0
  194. data/lib/ext/eventmachine-0.12.10/tests/test_object_protocol.rb +37 -0
  195. data/lib/ext/eventmachine-0.12.10/tests/test_pause.rb +70 -0
  196. data/lib/ext/eventmachine-0.12.10/tests/test_pending_connect_timeout.rb +48 -0
  197. data/lib/ext/eventmachine-0.12.10/tests/test_process_watch.rb +48 -0
  198. data/lib/ext/eventmachine-0.12.10/tests/test_processes.rb +128 -0
  199. data/lib/ext/eventmachine-0.12.10/tests/test_proxy_connection.rb +92 -0
  200. data/lib/ext/eventmachine-0.12.10/tests/test_pure.rb +125 -0
  201. data/lib/ext/eventmachine-0.12.10/tests/test_queue.rb +44 -0
  202. data/lib/ext/eventmachine-0.12.10/tests/test_running.rb +42 -0
  203. data/lib/ext/eventmachine-0.12.10/tests/test_sasl.rb +72 -0
  204. data/lib/ext/eventmachine-0.12.10/tests/test_send_file.rb +242 -0
  205. data/lib/ext/eventmachine-0.12.10/tests/test_servers.rb +76 -0
  206. data/lib/ext/eventmachine-0.12.10/tests/test_smtpclient.rb +83 -0
  207. data/lib/ext/eventmachine-0.12.10/tests/test_smtpserver.rb +85 -0
  208. data/lib/ext/eventmachine-0.12.10/tests/test_spawn.rb +322 -0
  209. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_args.rb +79 -0
  210. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_methods.rb +50 -0
  211. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_verify.rb +82 -0
  212. data/lib/ext/eventmachine-0.12.10/tests/test_timers.rb +162 -0
  213. data/lib/ext/eventmachine-0.12.10/tests/test_ud.rb +36 -0
  214. data/lib/ext/eventmachine-0.12.10/tests/testem.rb +31 -0
  215. data/lib/ext/eventmachine-0.12.10/web/whatis +7 -0
  216. data/lib/ext/misc/README +1 -0
  217. data/lib/ext/misc/indifferent_access.rb +131 -0
  218. data/lib/ext/uuidtools-2.1.1/CHANGELOG +56 -0
  219. data/lib/ext/uuidtools-2.1.1/LICENSE +20 -0
  220. data/lib/ext/uuidtools-2.1.1/README +13 -0
  221. data/lib/ext/uuidtools-2.1.1/Rakefile +48 -0
  222. data/lib/ext/uuidtools-2.1.1/lib/compat/securerandom.rb +202 -0
  223. data/lib/ext/uuidtools-2.1.1/lib/uuidtools/version.rb +35 -0
  224. data/lib/ext/uuidtools-2.1.1/lib/uuidtools.rb +618 -0
  225. data/lib/ext/uuidtools-2.1.1/spec/spec.opts +1 -0
  226. data/lib/ext/uuidtools-2.1.1/spec/spec_helper.rb +7 -0
  227. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/mac_address_spec.rb +15 -0
  228. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/utility_spec.rb +21 -0
  229. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_creation_spec.rb +121 -0
  230. data/lib/ext/uuidtools-2.1.1/spec/uuidtools/uuid_parsing_spec.rb +127 -0
  231. data/lib/ext/uuidtools-2.1.1/tasks/benchmark.rake +38 -0
  232. data/lib/ext/uuidtools-2.1.1/tasks/clobber.rake +2 -0
  233. data/lib/ext/uuidtools-2.1.1/tasks/gem.rake +68 -0
  234. data/lib/ext/uuidtools-2.1.1/tasks/git.rake +40 -0
  235. data/lib/ext/uuidtools-2.1.1/tasks/metrics.rake +22 -0
  236. data/lib/ext/uuidtools-2.1.1/tasks/rdoc.rake +29 -0
  237. data/lib/ext/uuidtools-2.1.1/tasks/rubyforge.rake +89 -0
  238. data/lib/ext/uuidtools-2.1.1/tasks/spec.rake +64 -0
  239. data/lib/ext/uuidtools-2.1.1/website/index.html +95 -0
  240. data/lib/sidekick/client/sidekick_client.rb +46 -0
  241. data/lib/sidekick/shared/sidekick_logger.rb +14 -0
  242. data/lib/sidekick/shared/sidekick_queue_publisher.rb +91 -0
  243. data/lib/sidekick-client.rb +7 -0
  244. data/sidekick-client.gemspec +289 -0
  245. data/test/helper.rb +10 -0
  246. data/test/test_sidekick-client.rb +7 -0
  247. metadata +311 -0
@@ -0,0 +1,94 @@
1
+ /*****************************************************************************
2
+
3
+ $Id$
4
+
5
+ File: ssl.h
6
+ Date: 30Apr06
7
+
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
+
11
+ This program is free software; you can redistribute it and/or modify
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
+
16
+ See the file COPYING for complete licensing information.
17
+
18
+ *****************************************************************************/
19
+
20
+
21
+ #ifndef __SslBox__H_
22
+ #define __SslBox__H_
23
+
24
+
25
+
26
+
27
+ #ifdef WITH_SSL
28
+
29
+ /******************
30
+ class SslContext_t
31
+ ******************/
32
+
33
+ class SslContext_t
34
+ {
35
+ public:
36
+ SslContext_t (bool is_server, const string &privkeyfile, const string &certchainfile);
37
+ virtual ~SslContext_t();
38
+
39
+ private:
40
+ static bool bLibraryInitialized;
41
+
42
+ private:
43
+ bool bIsServer;
44
+ SSL_CTX *pCtx;
45
+
46
+ EVP_PKEY *PrivateKey;
47
+ X509 *Certificate;
48
+
49
+ friend class SslBox_t;
50
+ };
51
+
52
+
53
+ /**************
54
+ class SslBox_t
55
+ **************/
56
+
57
+ class SslBox_t
58
+ {
59
+ public:
60
+ SslBox_t (bool is_server, const string &privkeyfile, const string &certchainfile, bool verify_peer, const unsigned long binding);
61
+ virtual ~SslBox_t();
62
+
63
+ int PutPlaintext (const char*, int);
64
+ int GetPlaintext (char*, int);
65
+
66
+ bool PutCiphertext (const char*, int);
67
+ bool CanGetCiphertext();
68
+ int GetCiphertext (char*, int);
69
+ bool IsHandshakeCompleted() {return bHandshakeCompleted;}
70
+
71
+ X509 *GetPeerCert();
72
+
73
+ void Shutdown();
74
+
75
+ protected:
76
+ SslContext_t *Context;
77
+
78
+ bool bIsServer;
79
+ bool bHandshakeCompleted;
80
+ bool bVerifyPeer;
81
+ SSL *pSSL;
82
+ BIO *pbioRead;
83
+ BIO *pbioWrite;
84
+
85
+ PageList OutboundQ;
86
+ };
87
+
88
+ extern "C" int ssl_verify_wrapper(int, X509_STORE_CTX*);
89
+
90
+ #endif // WITH_SSL
91
+
92
+
93
+ #endif // __SslBox__H_
94
+
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <classpath>
3
+ <classpathentry kind="src" path="src"/>
4
+ <classpathentry excluding="src/" kind="src" path=""/>
5
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
6
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
7
+ <classpathentry kind="output" path="src"/>
8
+ </classpath>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>em_reactor</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ <buildCommand>
9
+ <name>org.eclipse.jdt.core.javabuilder</name>
10
+ <arguments>
11
+ </arguments>
12
+ </buildCommand>
13
+ </buildSpec>
14
+ <natures>
15
+ <nature>org.eclipse.jdt.core.javanature</nature>
16
+ </natures>
17
+ </projectDescription>
@@ -0,0 +1,570 @@
1
+ /**
2
+ * $Id$
3
+ *
4
+ * Author:: Francis Cianfrocca (gmail: blackhedd)
5
+ * Homepage:: http://rubyeventmachine.com
6
+ * Date:: 15 Jul 2007
7
+ *
8
+ * See EventMachine and EventMachine::Connection for documentation and
9
+ * usage examples.
10
+ *
11
+ *
12
+ *----------------------------------------------------------------------------
13
+ *
14
+ * Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
15
+ * Gmail: blackhedd
16
+ *
17
+ * This program is free software; you can redistribute it and/or modify
18
+ * it under the terms of either: 1) the GNU General Public License
19
+ * as published by the Free Software Foundation; either version 2 of the
20
+ * License, or (at your option) any later version; or 2) Ruby's License.
21
+ *
22
+ * See the file COPYING for complete licensing information.
23
+ *
24
+ *---------------------------------------------------------------------------
25
+ *
26
+ *
27
+ */
28
+
29
+ package com.rubyeventmachine;
30
+
31
+ import java.io.*;
32
+ import java.nio.channels.*;
33
+ import java.util.*;
34
+ import java.nio.*;
35
+ import java.net.*;
36
+ import java.util.concurrent.atomic.*;
37
+ import java.security.*;
38
+
39
+ public class EmReactor {
40
+ public final int EM_TIMER_FIRED = 100;
41
+ public final int EM_CONNECTION_READ = 101;
42
+ public final int EM_CONNECTION_UNBOUND = 102;
43
+ public final int EM_CONNECTION_ACCEPTED = 103;
44
+ public final int EM_CONNECTION_COMPLETED = 104;
45
+ public final int EM_LOOPBREAK_SIGNAL = 105;
46
+ public final int EM_CONNECTION_NOTIFY_READABLE = 106;
47
+ public final int EM_CONNECTION_NOTIFY_WRITABLE = 107;
48
+ public final int EM_SSL_HANDSHAKE_COMPLETED = 108;
49
+ public final int EM_SSL_VERIFY = 109;
50
+ public final int EM_PROXY_TARGET_UNBOUND = 110;
51
+
52
+ private Selector mySelector;
53
+ private TreeMap<Long, ArrayList<Long>> Timers;
54
+ private HashMap<Long, EventableChannel> Connections;
55
+ private HashMap<Long, ServerSocketChannel> Acceptors;
56
+ private ArrayList<Long> NewConnections;
57
+ private ArrayList<Long> UnboundConnections;
58
+ private ArrayList<EventableSocketChannel> DetachedConnections;
59
+
60
+ private boolean bRunReactor;
61
+ private long BindingIndex;
62
+ private AtomicBoolean loopBreaker;
63
+ private ByteBuffer myReadBuffer;
64
+ private int timerQuantum;
65
+
66
+ public EmReactor() {
67
+ Timers = new TreeMap<Long, ArrayList<Long>>();
68
+ Connections = new HashMap<Long, EventableChannel>();
69
+ Acceptors = new HashMap<Long, ServerSocketChannel>();
70
+ NewConnections = new ArrayList<Long>();
71
+ UnboundConnections = new ArrayList<Long>();
72
+ DetachedConnections = new ArrayList<EventableSocketChannel>();
73
+
74
+ BindingIndex = 0;
75
+ loopBreaker = new AtomicBoolean();
76
+ loopBreaker.set(false);
77
+ myReadBuffer = ByteBuffer.allocate(32*1024); // don't use a direct buffer. Ruby doesn't seem to like them.
78
+ timerQuantum = 98;
79
+ }
80
+
81
+ /**
82
+ * This is a no-op stub, intended to be overridden in user code.
83
+ */
84
+ public void eventCallback (long sig, int eventType, ByteBuffer data, long data2) {
85
+ System.out.println ("Default callback: "+sig+" "+eventType+" "+data+" "+data2);
86
+ }
87
+ public void eventCallback (long sig, int eventType, ByteBuffer data) {
88
+ eventCallback (sig, eventType, data, 0);
89
+ }
90
+
91
+
92
+ public void run() {
93
+ try {
94
+ mySelector = Selector.open();
95
+ bRunReactor = true;
96
+ } catch (IOException e) {
97
+ throw new RuntimeException ("Could not open selector", e);
98
+ }
99
+
100
+ while (bRunReactor) {
101
+ runLoopbreaks();
102
+ if (!bRunReactor) break;
103
+
104
+ runTimers();
105
+ if (!bRunReactor) break;
106
+
107
+ removeUnboundConnections();
108
+ checkIO();
109
+ addNewConnections();
110
+ processIO();
111
+ }
112
+
113
+ close();
114
+ }
115
+
116
+ void addNewConnections() {
117
+ ListIterator<EventableSocketChannel> iter = DetachedConnections.listIterator(0);
118
+ while (iter.hasNext()) {
119
+ EventableSocketChannel ec = iter.next();
120
+ ec.cleanup();
121
+ }
122
+ DetachedConnections.clear();
123
+
124
+ ListIterator<Long> iter2 = NewConnections.listIterator(0);
125
+ while (iter2.hasNext()) {
126
+ long b = iter2.next();
127
+
128
+ EventableChannel ec = Connections.get(b);
129
+ if (ec != null) {
130
+ try {
131
+ ec.register();
132
+ } catch (ClosedChannelException e) {
133
+ UnboundConnections.add (ec.getBinding());
134
+ }
135
+ }
136
+ }
137
+ NewConnections.clear();
138
+ }
139
+
140
+ void removeUnboundConnections() {
141
+ ListIterator<Long> iter = UnboundConnections.listIterator(0);
142
+ while (iter.hasNext()) {
143
+ long b = iter.next();
144
+
145
+ EventableChannel ec = Connections.remove(b);
146
+ if (ec != null) {
147
+ eventCallback (b, EM_CONNECTION_UNBOUND, null);
148
+ ec.close();
149
+
150
+ EventableSocketChannel sc = (EventableSocketChannel) ec;
151
+ if (sc != null && sc.isAttached())
152
+ DetachedConnections.add (sc);
153
+ }
154
+ }
155
+ UnboundConnections.clear();
156
+ }
157
+
158
+ void checkIO() {
159
+ long timeout;
160
+
161
+ if (NewConnections.size() > 0) {
162
+ timeout = -1;
163
+ } else if (!Timers.isEmpty()) {
164
+ long now = new Date().getTime();
165
+ long k = Timers.firstKey();
166
+ long diff = k-now;
167
+
168
+ if (diff <= 0)
169
+ timeout = -1; // don't wait, just poll once
170
+ else
171
+ timeout = diff;
172
+ } else {
173
+ timeout = 0; // wait indefinitely
174
+ }
175
+
176
+ try {
177
+ if (timeout == -1)
178
+ mySelector.selectNow();
179
+ else
180
+ mySelector.select(timeout);
181
+ } catch (IOException e) {
182
+ e.printStackTrace();
183
+ }
184
+ }
185
+
186
+ void processIO() {
187
+ Iterator<SelectionKey> it = mySelector.selectedKeys().iterator();
188
+ while (it.hasNext()) {
189
+ SelectionKey k = it.next();
190
+ it.remove();
191
+
192
+ if (k.isConnectable())
193
+ isConnectable(k);
194
+
195
+ else if (k.isAcceptable())
196
+ isAcceptable(k);
197
+
198
+ else {
199
+ if (k.isWritable())
200
+ isWritable(k);
201
+
202
+ if (k.isReadable())
203
+ isReadable(k);
204
+ }
205
+ }
206
+ }
207
+
208
+ void isAcceptable (SelectionKey k) {
209
+ ServerSocketChannel ss = (ServerSocketChannel) k.channel();
210
+ SocketChannel sn;
211
+ long b;
212
+
213
+ for (int n = 0; n < 10; n++) {
214
+ try {
215
+ sn = ss.accept();
216
+ if (sn == null)
217
+ break;
218
+ } catch (IOException e) {
219
+ e.printStackTrace();
220
+ k.cancel();
221
+
222
+ ServerSocketChannel server = Acceptors.remove(k.attachment());
223
+ if (server != null)
224
+ try{ server.close(); } catch (IOException ex) {};
225
+ break;
226
+ }
227
+
228
+ try {
229
+ sn.configureBlocking(false);
230
+ } catch (IOException e) {
231
+ e.printStackTrace();
232
+ continue;
233
+ }
234
+
235
+ b = createBinding();
236
+ EventableSocketChannel ec = new EventableSocketChannel (sn, b, mySelector);
237
+ Connections.put (b, ec);
238
+ NewConnections.add (b);
239
+
240
+ eventCallback (((Long)k.attachment()).longValue(), EM_CONNECTION_ACCEPTED, null, b);
241
+ }
242
+ }
243
+
244
+ void isReadable (SelectionKey k) {
245
+ EventableChannel ec = (EventableChannel) k.attachment();
246
+ long b = ec.getBinding();
247
+
248
+ if (ec.isWatchOnly()) {
249
+ if (ec.isNotifyReadable())
250
+ eventCallback (b, EM_CONNECTION_NOTIFY_READABLE, null);
251
+ } else {
252
+ myReadBuffer.clear();
253
+
254
+ try {
255
+ ec.readInboundData (myReadBuffer);
256
+ myReadBuffer.flip();
257
+ if (myReadBuffer.limit() > 0)
258
+ eventCallback (b, EM_CONNECTION_READ, myReadBuffer);
259
+ } catch (IOException e) {
260
+ UnboundConnections.add (b);
261
+ }
262
+ }
263
+ }
264
+
265
+ void isWritable (SelectionKey k) {
266
+ EventableChannel ec = (EventableChannel) k.attachment();
267
+ long b = ec.getBinding();
268
+
269
+ if (ec.isWatchOnly()) {
270
+ if (ec.isNotifyWritable())
271
+ eventCallback (b, EM_CONNECTION_NOTIFY_WRITABLE, null);
272
+ }
273
+ else {
274
+ try {
275
+ if (!ec.writeOutboundData())
276
+ UnboundConnections.add (b);
277
+ } catch (IOException e) {
278
+ UnboundConnections.add (b);
279
+ }
280
+ }
281
+ }
282
+
283
+ void isConnectable (SelectionKey k) {
284
+ EventableSocketChannel ec = (EventableSocketChannel) k.attachment();
285
+ long b = ec.getBinding();
286
+
287
+ try {
288
+ if (ec.finishConnecting())
289
+ eventCallback (b, EM_CONNECTION_COMPLETED, null);
290
+ else
291
+ UnboundConnections.add (b);
292
+ } catch (IOException e) {
293
+ UnboundConnections.add (b);
294
+ }
295
+ }
296
+
297
+ void close() {
298
+ try {
299
+ if (mySelector != null)
300
+ mySelector.close();
301
+ } catch (IOException e) {}
302
+ mySelector = null;
303
+
304
+ // run down open connections and sockets.
305
+ Iterator<ServerSocketChannel> i = Acceptors.values().iterator();
306
+ while (i.hasNext()) {
307
+ try {
308
+ i.next().close();
309
+ } catch (IOException e) {}
310
+ }
311
+
312
+ // 29Sep09: We create an ArrayList of the existing connections, then iterate over
313
+ // that to call unbind on them. This is because an unbind can trigger a reconnect,
314
+ // which will add to the Connections HashMap, causing a ConcurrentModificationException.
315
+ // XXX: The correct behavior here would be to latch the various reactor methods to return
316
+ // immediately if the reactor is shutting down.
317
+ ArrayList<EventableChannel> conns = new ArrayList<EventableChannel>();
318
+ Iterator<EventableChannel> i2 = Connections.values().iterator();
319
+ while (i2.hasNext()) {
320
+ EventableChannel ec = i2.next();
321
+ if (ec != null) {
322
+ conns.add (ec);
323
+ }
324
+ }
325
+ Connections.clear();
326
+
327
+ ListIterator<EventableChannel> i3 = conns.listIterator(0);
328
+ while (i3.hasNext()) {
329
+ EventableChannel ec = i3.next();
330
+ eventCallback (ec.getBinding(), EM_CONNECTION_UNBOUND, null);
331
+ ec.close();
332
+
333
+ EventableSocketChannel sc = (EventableSocketChannel) ec;
334
+ if (sc != null && sc.isAttached())
335
+ DetachedConnections.add (sc);
336
+ }
337
+
338
+ ListIterator<EventableSocketChannel> i4 = DetachedConnections.listIterator(0);
339
+ while (i4.hasNext()) {
340
+ EventableSocketChannel ec = i4.next();
341
+ ec.cleanup();
342
+ }
343
+ DetachedConnections.clear();
344
+ }
345
+
346
+ void runLoopbreaks() {
347
+ if (loopBreaker.getAndSet(false)) {
348
+ eventCallback (0, EM_LOOPBREAK_SIGNAL, null);
349
+ }
350
+ }
351
+
352
+ public void stop() {
353
+ bRunReactor = false;
354
+ signalLoopbreak();
355
+ }
356
+
357
+ void runTimers() {
358
+ long now = new Date().getTime();
359
+ while (!Timers.isEmpty()) {
360
+ long k = Timers.firstKey();
361
+ if (k > now)
362
+ break;
363
+
364
+ ArrayList<Long> callbacks = Timers.get(k);
365
+ Timers.remove(k);
366
+
367
+ // Fire all timers at this timestamp
368
+ ListIterator<Long> iter = callbacks.listIterator(0);
369
+ while (iter.hasNext()) {
370
+ eventCallback (0, EM_TIMER_FIRED, null, iter.next().longValue());
371
+ }
372
+ }
373
+ }
374
+
375
+ public long installOneshotTimer (int milliseconds) {
376
+ long s = createBinding();
377
+ long deadline = new Date().getTime() + milliseconds;
378
+
379
+ if (Timers.containsKey(deadline)) {
380
+ Timers.get(deadline).add(s);
381
+ } else {
382
+ ArrayList<Long> callbacks = new ArrayList<Long>();
383
+ callbacks.add(s);
384
+ Timers.put(deadline, callbacks);
385
+ }
386
+
387
+ return s;
388
+ }
389
+
390
+ public long startTcpServer (SocketAddress sa) throws EmReactorException {
391
+ try {
392
+ ServerSocketChannel server = ServerSocketChannel.open();
393
+ server.configureBlocking(false);
394
+ server.socket().bind (sa);
395
+ long s = createBinding();
396
+ Acceptors.put(s, server);
397
+ server.register(mySelector, SelectionKey.OP_ACCEPT, s);
398
+ return s;
399
+ } catch (IOException e) {
400
+ throw new EmReactorException ("unable to open socket acceptor: " + e.toString());
401
+ }
402
+ }
403
+
404
+ public long startTcpServer (String address, int port) throws EmReactorException {
405
+ return startTcpServer (new InetSocketAddress (address, port));
406
+ }
407
+
408
+ public void stopTcpServer (long signature) throws IOException {
409
+ ServerSocketChannel server = Acceptors.remove(signature);
410
+ if (server != null)
411
+ server.close();
412
+ else
413
+ throw new RuntimeException ("failed to close unknown acceptor");
414
+ }
415
+
416
+ public long openUdpSocket (InetSocketAddress address) throws IOException {
417
+ // TODO, don't throw an exception out of here.
418
+ DatagramChannel dg = DatagramChannel.open();
419
+ dg.configureBlocking(false);
420
+ dg.socket().bind(address);
421
+ long b = createBinding();
422
+ EventableChannel ec = new EventableDatagramChannel (dg, b, mySelector);
423
+ dg.register(mySelector, SelectionKey.OP_READ, ec);
424
+ Connections.put(b, ec);
425
+ return b;
426
+ }
427
+
428
+ public long openUdpSocket (String address, int port) throws IOException {
429
+ return openUdpSocket (new InetSocketAddress (address, port));
430
+ }
431
+
432
+ public void sendData (long sig, ByteBuffer bb) throws IOException {
433
+ Connections.get(sig).scheduleOutboundData( bb );
434
+ }
435
+
436
+ public void sendData (long sig, byte[] data) throws IOException {
437
+ sendData (sig, ByteBuffer.wrap(data));
438
+ }
439
+
440
+ public void setCommInactivityTimeout (long sig, long mills) {
441
+ Connections.get(sig).setCommInactivityTimeout (mills);
442
+ }
443
+
444
+ public void sendDatagram (long sig, String data, int length, String recipAddress, int recipPort) {
445
+ sendDatagram (sig, ByteBuffer.wrap(data.getBytes()), recipAddress, recipPort);
446
+ }
447
+
448
+ public void sendDatagram (long sig, ByteBuffer bb, String recipAddress, int recipPort) {
449
+ (Connections.get(sig)).scheduleOutboundDatagram( bb, recipAddress, recipPort);
450
+ }
451
+
452
+ public long connectTcpServer (String address, int port) {
453
+ return connectTcpServer(null, 0, address, port);
454
+ }
455
+
456
+ public long connectTcpServer (String bindAddr, int bindPort, String address, int port) {
457
+ long b = createBinding();
458
+
459
+ try {
460
+ SocketChannel sc = SocketChannel.open();
461
+ sc.configureBlocking(false);
462
+ if (bindAddr != null)
463
+ sc.socket().bind(new InetSocketAddress (bindAddr, bindPort));
464
+
465
+ EventableSocketChannel ec = new EventableSocketChannel (sc, b, mySelector);
466
+
467
+ if (sc.connect (new InetSocketAddress (address, port))) {
468
+ // Connection returned immediately. Can happen with localhost connections.
469
+ // WARNING, this code is untested due to lack of available test conditions.
470
+ // Ought to be be able to come here from a localhost connection, but that
471
+ // doesn't happen on Linux. (Maybe on FreeBSD?)
472
+ // The reason for not handling this until we can test it is that we
473
+ // really need to return from this function WITHOUT triggering any EM events.
474
+ // That's because until the user code has seen the signature we generated here,
475
+ // it won't be able to properly dispatch them. The C++ EM deals with this
476
+ // by setting pending mode as a flag in ALL eventable descriptors and making
477
+ // the descriptor select for writable. Then, it can send UNBOUND and
478
+ // CONNECTION_COMPLETED on the next pass through the loop, because writable will
479
+ // fire.
480
+ throw new RuntimeException ("immediate-connect unimplemented");
481
+ }
482
+ else {
483
+ ec.setConnectPending();
484
+ Connections.put (b, ec);
485
+ NewConnections.add (b);
486
+ }
487
+ } catch (IOException e) {
488
+ // Can theoretically come here if a connect failure can be determined immediately.
489
+ // I don't know how to make that happen for testing purposes.
490
+ throw new RuntimeException ("immediate-connect unimplemented: " + e.toString());
491
+ }
492
+ return b;
493
+ }
494
+
495
+ public void closeConnection (long sig, boolean afterWriting) {
496
+ EventableChannel ec = Connections.get(sig);
497
+ if (ec != null)
498
+ if (ec.scheduleClose (afterWriting))
499
+ UnboundConnections.add (sig);
500
+ }
501
+
502
+ long createBinding() {
503
+ return ++BindingIndex;
504
+ }
505
+
506
+ public void signalLoopbreak() {
507
+ loopBreaker.set(true);
508
+ if (mySelector != null)
509
+ mySelector.wakeup();
510
+ }
511
+
512
+ public void startTls (long sig) throws NoSuchAlgorithmException, KeyManagementException {
513
+ Connections.get(sig).startTls();
514
+ }
515
+
516
+ public void setTimerQuantum (int mills) {
517
+ if (mills < 5 || mills > 2500)
518
+ throw new RuntimeException ("attempt to set invalid timer-quantum value: "+mills);
519
+ timerQuantum = mills;
520
+ }
521
+
522
+ public Object[] getPeerName (long sig) {
523
+ return Connections.get(sig).getPeerName();
524
+ }
525
+
526
+ public long attachChannel (SocketChannel sc, boolean watch_mode) {
527
+ long b = createBinding();
528
+
529
+ EventableSocketChannel ec = new EventableSocketChannel (sc, b, mySelector);
530
+
531
+ ec.setAttached();
532
+ if (watch_mode)
533
+ ec.setWatchOnly();
534
+
535
+ Connections.put (b, ec);
536
+ NewConnections.add (b);
537
+
538
+ return b;
539
+ }
540
+
541
+ public SocketChannel detachChannel (long sig) {
542
+ EventableSocketChannel ec = (EventableSocketChannel) Connections.get (sig);
543
+ if (ec != null) {
544
+ UnboundConnections.add (sig);
545
+ return ec.getChannel();
546
+ } else {
547
+ return null;
548
+ }
549
+ }
550
+
551
+ public void setNotifyReadable (long sig, boolean mode) {
552
+ ((EventableSocketChannel) Connections.get(sig)).setNotifyReadable(mode);
553
+ }
554
+
555
+ public void setNotifyWritable (long sig, boolean mode) {
556
+ ((EventableSocketChannel) Connections.get(sig)).setNotifyWritable(mode);
557
+ }
558
+
559
+ public boolean isNotifyReadable (long sig) {
560
+ return Connections.get(sig).isNotifyReadable();
561
+ }
562
+
563
+ public boolean isNotifyWritable (long sig) {
564
+ return Connections.get(sig).isNotifyWritable();
565
+ }
566
+
567
+ public int getConnectionCount() {
568
+ return Connections.size() + Acceptors.size();
569
+ }
570
+ }