mack-notifier 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. data/lib/gems.rb +13 -0
  2. data/lib/gems/tmail-1.2.3.1/ext/Makefile +20 -0
  3. data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/MANIFEST +4 -0
  4. data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/depend +1 -0
  5. data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/extconf.rb +33 -0
  6. data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/tmailscanner.c +583 -0
  7. data/lib/gems/tmail-1.2.3.1/lib/tmail.rb +5 -0
  8. data/lib/gems/tmail-1.2.3.1/lib/tmail/Makefile +18 -0
  9. data/lib/gems/tmail-1.2.3.1/lib/tmail/address.rb +426 -0
  10. data/lib/gems/tmail-1.2.3.1/lib/tmail/attachments.rb +46 -0
  11. data/lib/gems/tmail-1.2.3.1/lib/tmail/base64.rb +46 -0
  12. data/lib/gems/tmail-1.2.3.1/lib/tmail/compat.rb +41 -0
  13. data/lib/gems/tmail-1.2.3.1/lib/tmail/config.rb +67 -0
  14. data/lib/gems/tmail-1.2.3.1/lib/tmail/core_extensions.rb +63 -0
  15. data/lib/gems/tmail-1.2.3.1/lib/tmail/encode.rb +581 -0
  16. data/lib/gems/tmail-1.2.3.1/lib/tmail/header.rb +960 -0
  17. data/lib/gems/tmail-1.2.3.1/lib/tmail/index.rb +9 -0
  18. data/lib/gems/tmail-1.2.3.1/lib/tmail/interface.rb +1125 -0
  19. data/lib/gems/tmail-1.2.3.1/lib/tmail/loader.rb +3 -0
  20. data/lib/gems/tmail-1.2.3.1/lib/tmail/mail.rb +578 -0
  21. data/lib/gems/tmail-1.2.3.1/lib/tmail/mailbox.rb +495 -0
  22. data/lib/gems/tmail-1.2.3.1/lib/tmail/main.rb +6 -0
  23. data/lib/gems/tmail-1.2.3.1/lib/tmail/mbox.rb +3 -0
  24. data/lib/gems/tmail-1.2.3.1/lib/tmail/net.rb +248 -0
  25. data/lib/gems/tmail-1.2.3.1/lib/tmail/obsolete.rb +132 -0
  26. data/lib/gems/tmail-1.2.3.1/lib/tmail/parser.rb +1476 -0
  27. data/lib/gems/tmail-1.2.3.1/lib/tmail/parser.y +381 -0
  28. data/lib/gems/tmail-1.2.3.1/lib/tmail/port.rb +379 -0
  29. data/lib/gems/tmail-1.2.3.1/lib/tmail/quoting.rb +118 -0
  30. data/lib/gems/tmail-1.2.3.1/lib/tmail/require_arch.rb +58 -0
  31. data/lib/gems/tmail-1.2.3.1/lib/tmail/scanner.rb +49 -0
  32. data/lib/gems/tmail-1.2.3.1/lib/tmail/scanner_r.rb +261 -0
  33. data/lib/gems/tmail-1.2.3.1/lib/tmail/stringio.rb +280 -0
  34. data/lib/gems/tmail-1.2.3.1/lib/tmail/utils.rb +337 -0
  35. data/lib/gems/tmail-1.2.3.1/lib/tmail/version.rb +39 -0
  36. data/lib/gems/tmail-1.2.3.1/meta/MANIFEST +128 -0
  37. data/lib/gems/tmail-1.2.3.1/meta/VERSION +1 -0
  38. data/lib/gems/tmail-1.2.3.1/meta/project.yaml +30 -0
  39. data/lib/gems/tmail-1.2.3.1/meta/unixname +1 -0
  40. data/lib/gems/validatable-1.6.7/README +118 -0
  41. data/lib/gems/validatable-1.6.7/lib/child_validation.rb +15 -0
  42. data/lib/gems/validatable-1.6.7/lib/errors.rb +74 -0
  43. data/lib/gems/validatable-1.6.7/lib/included_validation.rb +9 -0
  44. data/lib/gems/validatable-1.6.7/lib/macros.rb +283 -0
  45. data/lib/gems/validatable-1.6.7/lib/object_extension.rb +21 -0
  46. data/lib/gems/validatable-1.6.7/lib/requireable.rb +26 -0
  47. data/lib/gems/validatable-1.6.7/lib/understandable.rb +31 -0
  48. data/lib/gems/validatable-1.6.7/lib/validatable.rb +19 -0
  49. data/lib/gems/validatable-1.6.7/lib/validatable_class_methods.rb +85 -0
  50. data/lib/gems/validatable-1.6.7/lib/validatable_instance_methods.rb +106 -0
  51. data/lib/gems/validatable-1.6.7/lib/validations/validates_acceptance_of.rb +11 -0
  52. data/lib/gems/validatable-1.6.7/lib/validations/validates_confirmation_of.rb +15 -0
  53. data/lib/gems/validatable-1.6.7/lib/validations/validates_each.rb +14 -0
  54. data/lib/gems/validatable-1.6.7/lib/validations/validates_format_of.rb +13 -0
  55. data/lib/gems/validatable-1.6.7/lib/validations/validates_length_of.rb +25 -0
  56. data/lib/gems/validatable-1.6.7/lib/validations/validates_numericality_of.rb +16 -0
  57. data/lib/gems/validatable-1.6.7/lib/validations/validates_presence_of.rb +13 -0
  58. data/lib/gems/validatable-1.6.7/lib/validations/validates_true_for.rb +13 -0
  59. data/lib/gems/validatable-1.6.7/lib/validations/validation_base.rb +88 -0
  60. data/lib/gems/validatable-1.6.7/rakefile.rb +50 -0
  61. data/lib/gems/validatable-1.6.7/test/all_tests.rb +1 -0
  62. data/lib/gems/validatable-1.6.7/test/functional/validatable_test.rb +437 -0
  63. data/lib/gems/validatable-1.6.7/test/functional/validates_acceptance_of_test.rb +16 -0
  64. data/lib/gems/validatable-1.6.7/test/functional/validates_confirmation_of_test.rb +56 -0
  65. data/lib/gems/validatable-1.6.7/test/functional/validates_each_test.rb +14 -0
  66. data/lib/gems/validatable-1.6.7/test/functional/validates_format_of_test.rb +34 -0
  67. data/lib/gems/validatable-1.6.7/test/functional/validates_length_of_test.rb +64 -0
  68. data/lib/gems/validatable-1.6.7/test/functional/validates_numericality_of_test.rb +57 -0
  69. data/lib/gems/validatable-1.6.7/test/functional/validates_presence_of_test.rb +16 -0
  70. data/lib/gems/validatable-1.6.7/test/functional/validates_true_for_test.rb +27 -0
  71. data/lib/gems/validatable-1.6.7/test/test_helper.rb +33 -0
  72. data/lib/gems/validatable-1.6.7/test/unit/errors_test.rb +64 -0
  73. data/lib/gems/validatable-1.6.7/test/unit/understandable_test.rb +19 -0
  74. data/lib/gems/validatable-1.6.7/test/unit/validatable_test.rb +38 -0
  75. data/lib/gems/validatable-1.6.7/test/unit/validates_acceptance_of_test.rb +21 -0
  76. data/lib/gems/validatable-1.6.7/test/unit/validates_confirmation_of_test.rb +64 -0
  77. data/lib/gems/validatable-1.6.7/test/unit/validates_format_of_test.rb +34 -0
  78. data/lib/gems/validatable-1.6.7/test/unit/validates_length_of_test.rb +75 -0
  79. data/lib/gems/validatable-1.6.7/test/unit/validates_numericality_of_test.rb +52 -0
  80. data/lib/gems/validatable-1.6.7/test/unit/validates_presence_of_test.rb +25 -0
  81. data/lib/gems/validatable-1.6.7/test/unit/validates_true_for_test.rb +29 -0
  82. data/lib/gems/validatable-1.6.7/test/unit/validation_base_test.rb +52 -0
  83. data/lib/gems/xmpp4r-0.4/CHANGELOG +83 -0
  84. data/lib/gems/xmpp4r-0.4/COPYING +340 -0
  85. data/lib/gems/xmpp4r-0.4/LICENSE +59 -0
  86. data/lib/gems/xmpp4r-0.4/README.rdoc +110 -0
  87. data/lib/gems/xmpp4r-0.4/README_ruby19.txt +43 -0
  88. data/lib/gems/xmpp4r-0.4/Rakefile +262 -0
  89. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
  90. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
  91. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
  92. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
  93. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
  94. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
  95. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
  96. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
  97. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
  98. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
  99. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
  100. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
  101. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
  102. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
  103. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
  104. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
  105. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
  106. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
  107. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
  108. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
  109. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
  110. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
  111. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
  112. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
  113. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
  114. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/client.rb +70 -0
  115. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/component.rb +11 -0
  116. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
  117. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
  118. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
  119. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
  120. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
  121. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
  122. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/register.rb +42 -0
  123. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
  124. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
  125. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
  126. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
  127. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
  128. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
  129. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
  130. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
  131. data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
  132. data/lib/gems/xmpp4r-0.4/lib/xmpp4r.rb +116 -0
  133. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/base64.rb +32 -0
  134. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams.rb +15 -0
  135. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
  136. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
  137. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
  138. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
  139. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
  140. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
  141. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
  142. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
  143. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
  144. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
  145. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
  146. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
  147. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/callbacks.rb +124 -0
  148. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps.rb +1 -0
  149. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps/c.rb +53 -0
  150. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps/helper/generator.rb +160 -0
  151. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps/helper/helper.rb +87 -0
  152. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/client.rb +317 -0
  153. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/command/helper/responder.rb +53 -0
  154. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/command/iq/command.rb +154 -0
  155. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/component.rb +103 -0
  156. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/connection.rb +219 -0
  157. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/dataforms.rb +5 -0
  158. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/dataforms/x/data.rb +297 -0
  159. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/debuglog.rb +42 -0
  160. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/delay.rb +5 -0
  161. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/delay/x/delay.rb +99 -0
  162. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery.rb +7 -0
  163. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery/helper/responder.rb +165 -0
  164. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
  165. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
  166. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/errors.rb +281 -0
  167. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/feature_negotiation.rb +5 -0
  168. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
  169. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/framework/base.rb +55 -0
  170. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/framework/bot.rb +148 -0
  171. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/httpbinding.rb +5 -0
  172. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/httpbinding/client.rb +285 -0
  173. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/idgenerator.rb +37 -0
  174. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/iq.rb +221 -0
  175. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/jid.rb +167 -0
  176. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/message.rb +148 -0
  177. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc.rb +14 -0
  178. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
  179. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
  180. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
  181. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
  182. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
  183. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
  184. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/item.rb +143 -0
  185. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/x/muc.rb +70 -0
  186. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
  187. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
  188. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/presence.rb +232 -0
  189. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub.rb +8 -0
  190. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
  191. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/event.rb +49 -0
  192. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/item.rb +35 -0
  193. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/items.rb +44 -0
  194. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
  195. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/publish.rb +24 -0
  196. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
  197. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
  198. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
  199. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
  200. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
  201. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
  202. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
  203. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/query.rb +15 -0
  204. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rexmladdons.rb +151 -0
  205. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster.rb +7 -0
  206. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster/helper/roster.rb +519 -0
  207. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster/iq/roster.rb +215 -0
  208. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster/x/roster.rb +138 -0
  209. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc.rb +2 -0
  210. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/helper/client.rb +123 -0
  211. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/helper/server.rb +74 -0
  212. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
  213. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
  214. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/sasl.rb +237 -0
  215. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/semaphore.rb +38 -0
  216. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/stream.rb +497 -0
  217. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/streamparser.rb +77 -0
  218. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/tune.rb +2 -0
  219. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/tune/helper/helper.rb +58 -0
  220. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/tune/tune.rb +113 -0
  221. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/vcard.rb +6 -0
  222. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
  223. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
  224. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version.rb +7 -0
  225. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version/helper/responder.rb +72 -0
  226. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
  227. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version/iq/version.rb +105 -0
  228. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/x.rb +37 -0
  229. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xhtml.rb +1 -0
  230. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xhtml/html.rb +115 -0
  231. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xmpp4r.rb +18 -0
  232. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xmppelement.rb +168 -0
  233. data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xmppstanza.rb +162 -0
  234. data/lib/gems/xmpp4r-0.4/setup.rb +1586 -0
  235. data/lib/gems/xmpp4r-0.4/test/bytestreams/tc_ibb.rb +186 -0
  236. data/lib/gems/xmpp4r-0.4/test/bytestreams/tc_socks5bytestreams.rb +113 -0
  237. data/lib/gems/xmpp4r-0.4/test/caps/tc_helper.rb +156 -0
  238. data/lib/gems/xmpp4r-0.4/test/dataforms/tc_data.rb +81 -0
  239. data/lib/gems/xmpp4r-0.4/test/delay/tc_xdelay.rb +51 -0
  240. data/lib/gems/xmpp4r-0.4/test/discovery/tc_responder.rb +91 -0
  241. data/lib/gems/xmpp4r-0.4/test/lib/assert_equal_xml.rb +14 -0
  242. data/lib/gems/xmpp4r-0.4/test/lib/clienttester.rb +120 -0
  243. data/lib/gems/xmpp4r-0.4/test/muc/tc_muc_mucclient.rb +830 -0
  244. data/lib/gems/xmpp4r-0.4/test/muc/tc_muc_simplemucclient.rb +114 -0
  245. data/lib/gems/xmpp4r-0.4/test/muc/tc_mucowner.rb +50 -0
  246. data/lib/gems/xmpp4r-0.4/test/pubsub/tc_helper.rb +662 -0
  247. data/lib/gems/xmpp4r-0.4/test/pubsub/tc_nodeconfig.rb +54 -0
  248. data/lib/gems/xmpp4r-0.4/test/pubsub/tc_subscriptionconfig.rb +41 -0
  249. data/lib/gems/xmpp4r-0.4/test/roster/tc_helper.rb +514 -0
  250. data/lib/gems/xmpp4r-0.4/test/roster/tc_iqqueryroster.rb +173 -0
  251. data/lib/gems/xmpp4r-0.4/test/roster/tc_xroster.rb +73 -0
  252. data/lib/gems/xmpp4r-0.4/test/rpc/tc_helper.rb +96 -0
  253. data/lib/gems/xmpp4r-0.4/test/tc_callbacks.rb +129 -0
  254. data/lib/gems/xmpp4r-0.4/test/tc_class_names.rb +146 -0
  255. data/lib/gems/xmpp4r-0.4/test/tc_client.rb +30 -0
  256. data/lib/gems/xmpp4r-0.4/test/tc_errors.rb +146 -0
  257. data/lib/gems/xmpp4r-0.4/test/tc_idgenerator.rb +30 -0
  258. data/lib/gems/xmpp4r-0.4/test/tc_iq.rb +113 -0
  259. data/lib/gems/xmpp4r-0.4/test/tc_iqquery.rb +31 -0
  260. data/lib/gems/xmpp4r-0.4/test/tc_jid.rb +204 -0
  261. data/lib/gems/xmpp4r-0.4/test/tc_message.rb +116 -0
  262. data/lib/gems/xmpp4r-0.4/test/tc_presence.rb +150 -0
  263. data/lib/gems/xmpp4r-0.4/test/tc_rexml.rb +139 -0
  264. data/lib/gems/xmpp4r-0.4/test/tc_stream.rb +229 -0
  265. data/lib/gems/xmpp4r-0.4/test/tc_streamComponent.rb +95 -0
  266. data/lib/gems/xmpp4r-0.4/test/tc_streamError.rb +131 -0
  267. data/lib/gems/xmpp4r-0.4/test/tc_streamSend.rb +59 -0
  268. data/lib/gems/xmpp4r-0.4/test/tc_streamparser.rb +112 -0
  269. data/lib/gems/xmpp4r-0.4/test/tc_xmppstanza.rb +135 -0
  270. data/lib/gems/xmpp4r-0.4/test/ts_xmpp4r.rb +53 -0
  271. data/lib/gems/xmpp4r-0.4/test/tune/tc_helper_recv.rb +84 -0
  272. data/lib/gems/xmpp4r-0.4/test/tune/tc_helper_send.rb +74 -0
  273. data/lib/gems/xmpp4r-0.4/test/tune/tc_tune.rb +79 -0
  274. data/lib/gems/xmpp4r-0.4/test/vcard/tc_helper.rb +49 -0
  275. data/lib/gems/xmpp4r-0.4/test/vcard/tc_iqvcard.rb +62 -0
  276. data/lib/gems/xmpp4r-0.4/test/version/tc_helper.rb +60 -0
  277. data/lib/gems/xmpp4r-0.4/test/version/tc_iqqueryversion.rb +97 -0
  278. data/lib/gems/xmpp4r-0.4/test/xhtml/tc_html.rb +41 -0
  279. data/lib/gems/xmpp4r-0.4/tools/gen_requires.bash +31 -0
  280. data/lib/gems/xmpp4r-0.4/tools/xmpp4r-gemspec-test.rb +11 -0
  281. data/lib/gems/xmpp4r-0.4/xmpp4r.gemspec +291 -0
  282. data/lib/gems/xmpp4r-simple-0.8.8/CHANGELOG +73 -0
  283. data/lib/gems/xmpp4r-simple-0.8.8/COPYING +281 -0
  284. data/lib/gems/xmpp4r-simple-0.8.8/README +59 -0
  285. data/lib/gems/xmpp4r-simple-0.8.8/lib/xmpp4r-simple.rb +492 -0
  286. data/lib/gems/xmpp4r-simple-0.8.8/test/test_xmpp4r_simple.rb +242 -0
  287. data/lib/mack-notifier.rb +1 -3
  288. metadata +398 -46
@@ -0,0 +1,31 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ module Jabber
6
+ module Bytestreams
7
+ ##
8
+ # Implementation of IBB at the initiator side
9
+ class IBBInitiator < IBB
10
+ # You may set the block-size before open
11
+ attr_accessor :block_size
12
+
13
+ ##
14
+ # Open the stream to the peer,
15
+ # waits for successful result
16
+ #
17
+ # May throw ServerError
18
+ def open
19
+ iq = Iq.new(:set, @peer_jid)
20
+ open = iq.add REXML::Element.new('open')
21
+ open.add_namespace IBB::NS_IBB
22
+ open.attributes['sid'] = @session_id
23
+ open.attributes['block-size'] = @block_size.to_s
24
+
25
+ @stream.send_with_id(iq)
26
+
27
+ activate
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ module Jabber
6
+ module Bytestreams
7
+ ##
8
+ # Implementation of IBB at the target side
9
+ class IBBTarget < IBB
10
+ # You may read the block-size after accept
11
+ attr_reader :block_size
12
+
13
+ def initialize(stream, session_id, initiator_jid, target_jid)
14
+ # Target and Initiator are swapped here, because we're the target
15
+ super(stream, session_id, target_jid, initiator_jid)
16
+ end
17
+
18
+ ##
19
+ # Wait for the initiator side to start
20
+ # the stream.
21
+ def accept
22
+ connect_sem = Semaphore.new
23
+
24
+ @stream.add_iq_callback(200, self) { |iq|
25
+ open = iq.first_element('open')
26
+ if iq.type == :set and iq.from == @peer_jid and iq.to == @my_jid and open and open.attributes['sid'] == @session_id
27
+ @stream.delete_iq_callback(self)
28
+ activate
29
+ @block_size = (open.attributes['block-size'] || 4096).to_i
30
+
31
+ reply = iq.answer(false)
32
+ reply.type = :result
33
+ @stream.send(reply)
34
+
35
+ connect_sem.run
36
+ true
37
+ else
38
+ false
39
+ end
40
+ }
41
+
42
+ connect_sem.wait
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,152 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ require 'socket'
6
+ require 'thread'
7
+ require 'timeout'
8
+ require 'digest/sha1'
9
+
10
+ require 'xmpp4r/callbacks'
11
+
12
+ module Jabber
13
+ module Bytestreams
14
+ ##
15
+ # SOCKS5 Bytestreams (JEP-0065) implementation
16
+ #
17
+ # Don't use directly, use SOCKS5BytestreamsInitiator
18
+ # and SOCKS5BytestreamsTarget
19
+ class SOCKS5Bytestreams
20
+ ##
21
+ # [StreamHost] the SOCKS connection is using
22
+ attr_reader :streamhost_used
23
+
24
+ ##
25
+ # SOCKS connection timeout (for trying multiple streamhosts)
26
+ #
27
+ # default: nil, use the OS' default timeout
28
+ attr_accessor :connect_timeout
29
+
30
+ def initialize(stream, session_id, initiator_jid, target_jid)
31
+ @stream = stream
32
+ @session_id = session_id
33
+ @initiator_jid = (initiator_jid.kind_of?(String) ? JID.new(initiator_jid) : initiator_jid)
34
+ @target_jid = (target_jid.kind_of?(String) ? JID.new(target_jid) : target_jid)
35
+ @socks = nil
36
+ @connect_timeout = nil
37
+ @streamhost_used = nil
38
+ @streamhost_cbs = CallbackList.new
39
+ end
40
+
41
+ ##
42
+ # Add a callback that will be called when there is action regarding
43
+ # SOCKS stream-hosts
44
+ #
45
+ # Usage of this callback is optional and serves informational purposes only.
46
+ #
47
+ # block takes three arguments:
48
+ # * The StreamHost instance that is currently being tried
49
+ # * State information (is either :connecting, :authenticating, :success or :failure)
50
+ # * The exception value for the state :failure, else nil
51
+ def add_streamhost_callback(priority = 0, ref = nil, &block)
52
+ @streamhost_cbs.add(priority, ref, block)
53
+ end
54
+
55
+ ##
56
+ # Receive from the stream-host
57
+ # length:: [Fixnum] Amount of bytes (Will be passed to TCPSocket#read for the underlying SOCKS5 connection)
58
+ # result:: [String] (or [nil] if finished)
59
+ def read(length=nil)
60
+ @socks.read(length)
61
+ end
62
+
63
+ ##
64
+ # Flush the SOCKS5 socket
65
+ def flush
66
+ @socks.flush
67
+ end
68
+
69
+ ##
70
+ # Send to the stream-host
71
+ # buf:: [String] Data
72
+ # result:: [Fixnum] Amount of bytes sent
73
+ def write(buf)
74
+ @socks.write(buf)
75
+ # FIXME: On FreeBSD this throws Errno::EPERM after it has already written a few
76
+ # kilobytes, and when there are multiple sockets. ktrace told, that this originates
77
+ # from the syscall, not ruby.
78
+ end
79
+
80
+ ##
81
+ # Close the stream-host connection
82
+ def close
83
+ @socks.close
84
+ end
85
+
86
+ ##
87
+ # Query a JID for its stream-host information
88
+ #
89
+ # SOCKS5BytestreamsInitiator#add_streamhost can do this for you.
90
+ # Use this method if you plan to do multiple transfers, so
91
+ # you can cache the result.
92
+ # stream:: [Stream] to operate on
93
+ # streamhost:: [JID] of the proxy
94
+ # my_jid:: [JID] Optional sender JID for Component operation
95
+ def self.query_streamhost(stream, streamhost, my_jid=nil)
96
+ res = nil
97
+
98
+ iq = Iq.new(:get, streamhost)
99
+ iq.from = my_jid
100
+ iq.add(IqQueryBytestreams.new)
101
+ stream.send_with_id(iq) { |reply|
102
+ reply.query.each_element { |e|
103
+ if e.kind_of?(StreamHost)
104
+ e.jid = reply.from # Help misconfigured proxys
105
+ res = e
106
+ end
107
+ }
108
+ }
109
+
110
+ if res and res.jid and res.host and res.port
111
+ res
112
+ else
113
+ nil
114
+ end
115
+ end
116
+
117
+ private
118
+
119
+ ##
120
+ # The address the stream-host expects from us.
121
+ # According to JEP-0096 this is the SHA1 hash
122
+ # of the concatenation of session_id,
123
+ # initiator_jid and target_jid.
124
+ # result:: [String] SHA1 hash
125
+ def stream_address
126
+ Digest::SHA1.hexdigest("#{@session_id}#{@initiator_jid}#{@target_jid}")
127
+ end
128
+
129
+ ##
130
+ # Try a streamhost
131
+ # result:: [SOCKS5Socket]
132
+ def connect_socks(streamhost)
133
+ Timeout::timeout(@connect_timeout, Errno::ETIMEDOUT) {
134
+ Jabber::debuglog("SOCKS5 Bytestreams: connecting to proxy #{streamhost.jid} (#{streamhost.host}:#{streamhost.port})")
135
+ @streamhost_cbs.process(streamhost, :connecting, nil)
136
+ socks = SOCKS5Socket.new(streamhost.host, streamhost.port)
137
+
138
+ Jabber::debuglog("SOCKS5 Bytestreams: connected, authenticating")
139
+ @streamhost_cbs.process(streamhost, :authenticating, nil)
140
+ socks.auth
141
+
142
+ socks.connect_domain(stream_address, 0)
143
+
144
+ Jabber::debuglog("SOCKS5 Bytestreams: connected")
145
+ @streamhost_cbs.process(streamhost, :success, nil)
146
+
147
+ socks
148
+ }
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,86 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ module Jabber
6
+ module Bytestreams
7
+ ##
8
+ # SOCKS5Bytestreams implementation for the initiator side
9
+ class SOCKS5BytestreamsInitiator < SOCKS5Bytestreams
10
+ attr_reader :streamhosts
11
+
12
+ def initialize(stream, session_id, initiator_jid, target_jid)
13
+ super
14
+ @streamhosts = []
15
+ end
16
+
17
+ ##
18
+ # Add a streamhost which will be offered to the target
19
+ #
20
+ # streamhost:: can be:
21
+ # * [StreamHost] if already got all information (host/port)
22
+ # * [SOCKS5BytestreamsServer] if this is the local streamhost
23
+ # * [String] or [JID] if information should be automatically resolved by SOCKS5Bytestreams::query_streamhost
24
+ def add_streamhost(streamhost)
25
+ if streamhost.kind_of?(StreamHost)
26
+ @streamhosts << streamhost
27
+ elsif streamhost.kind_of?(SOCKS5BytestreamsServer)
28
+ streamhost.each_streamhost(@initiator_jid) { |sh|
29
+ @streamhosts << sh
30
+ }
31
+ elsif streamhost.kind_of?(String) or streamhost.kind_of?(JID)
32
+ @streamhosts << SOCKS5Bytestreams::query_streamhost(@stream, streamhost, @initiator_jid)
33
+ else
34
+ raise "Unknwon streamhost type: #{streamhost.class}"
35
+ end
36
+ end
37
+
38
+ ##
39
+ # Send the configured streamhosts to the target,
40
+ # wait for an answer and
41
+ # connect to the host the target chose.
42
+ def open
43
+ iq1 = Iq.new(:set, @target_jid)
44
+ iq1.from = @initiator_jid
45
+ bs = iq1.add IqQueryBytestreams.new(@session_id)
46
+ @streamhosts.each { |se|
47
+ bs.add(se)
48
+ }
49
+
50
+ peer_used = nil
51
+ @stream.send_with_id(iq1) { |response|
52
+ if response.query.kind_of?(IqQueryBytestreams)
53
+ peer_used = response.query.streamhost_used
54
+ raise "No streamhost-used" unless peer_used
55
+ raise "Invalid streamhost-used" unless peer_used.jid
56
+ end
57
+ }
58
+
59
+ @streamhost_used = nil
60
+ @streamhosts.each { |sh|
61
+ if peer_used.jid == sh.jid
62
+ @streamhost_used = sh
63
+ break
64
+ end
65
+ }
66
+ if @streamhost_used.jid == @initiator_jid
67
+ # This is our own JID, so the target chose SOCKS5BytestreamsServer
68
+ @socks = @streamhost_used.server.peer_sock(stream_address)
69
+ raise "Target didn't connect" unless @socks
70
+ @streamhost_cbs.process(@streamhost_used, :success, nil)
71
+ else
72
+ begin
73
+ @socks = connect_socks(@streamhost_used)
74
+ rescue Exception => e
75
+ Jabber::debuglog("SOCKS5 Bytestreams: #{e.class}: #{e}\n#{e.backtrace.join("\n")}")
76
+ @streamhost_cbs.process(@streamhost_used, :failure, e)
77
+ raise e
78
+ end
79
+ iq2 = Iq.new(:set, @streamhost_used.jid)
80
+ iq2.add(IqQueryBytestreams.new(@session_id)).activate = @target_jid.to_s
81
+ @stream.send_with_id(iq2)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,198 @@
1
+ # =XMPP4R - XMPP Library for Ruby
2
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
3
+ # Website::http://home.gna.org/xmpp4r/
4
+
5
+ module Jabber
6
+ module Bytestreams
7
+ ##
8
+ # The SOCKS5BytestreamsServer is an implementation of a SOCKS5 server.
9
+ #
10
+ # You can use it if you're reachable by your SOCKS5Bytestreams peers,
11
+ # thus avoiding use of an external proxy.
12
+ #
13
+ # ==Usage:
14
+ # * Instantiate with an unfirewalled port
15
+ # * Add your external IP addresses with SOCKS5BytestreamsServer#add_address
16
+ # * Once you've got an *outgoing* SOCKS5BytestreamsInitiator, do
17
+ # <tt>SOCKS5BytestreamsInitiator#add_streamhost(my_socks5bytestreamsserver)</tt>
18
+ # *before* you do <tt>SOCKS5BytestreamsInitiator#open</tt>
19
+ class SOCKS5BytestreamsServer
20
+ ##
21
+ # Start a local SOCKS5BytestreamsServer
22
+ #
23
+ # Will start to listen on the given TCP port and
24
+ # accept new peers
25
+ # port:: [Fixnum] TCP port to listen on
26
+ # listen_on:: [String] Optional address for the server socket to listen on (i.e. '0.0.0.0' or '::')
27
+ def initialize(port, listen_on=nil)
28
+ @port = port
29
+ @addresses = []
30
+ @peers = []
31
+ @peers_lock = Mutex.new
32
+ if listen_on
33
+ socket = TCPServer.new(listen_on, port)
34
+ else
35
+ socket = TCPServer.new(port)
36
+ end
37
+
38
+ Thread.new do
39
+ Thread.current.abort_on_exception = true
40
+ loop do
41
+ peer = SOCKS5BytestreamsPeer.new(socket.accept)
42
+ Thread.new do
43
+ Thread.current.abort_on_exception = true
44
+ begin
45
+ peer.start
46
+ rescue
47
+ Jabber::debuglog("SOCKS5 BytestreamsServer: Error accepting peer: #{$!}")
48
+ end
49
+ end
50
+ @peers_lock.synchronize do
51
+ @peers << peer
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ ##
58
+ # Find the socket a peer is associated to
59
+ #
60
+ # This method also performs some housekeeping, ie. removing
61
+ # peers with closed sockets.
62
+ # addr:: [String] Address like SOCKS5Bytestreams#stream_address
63
+ # result:: [TCPSocker] or [nil]
64
+ def peer_sock(addr)
65
+ res = nil
66
+ @peers_lock.synchronize {
67
+ removes = []
68
+
69
+ @peers.each { |peer|
70
+ if peer.socket and peer.socket.closed?
71
+ # Queue peers with closed socket for removal
72
+ removes << peer
73
+ elsif peer.address == addr and res.nil?
74
+ res = peer.socket
75
+ end
76
+
77
+ # If we sent multiple addresses of our own, clients may
78
+ # connect multiple times. DO NOT close any other connections
79
+ # here. These may belong to other concurrent bytestreams,
80
+ # believe that the peer will close any unneeded sockets
81
+ # which will then be picked up by the next call to peer_sock.
82
+ }
83
+
84
+ # If we sent multiple addresses of our own, clients may
85
+ # connect multiple times. Close these connections here.
86
+ @peers.delete_if { |peer|
87
+ if removes.include? peer
88
+ peer.socket.close rescue IOError
89
+ true
90
+ else
91
+ false
92
+ end
93
+ }
94
+ }
95
+
96
+ res
97
+ end
98
+
99
+ ##
100
+ # Add an external IP address
101
+ #
102
+ # This is a must-have, as SOCKS5BytestreamsInitiator must inform
103
+ # the target where to connect
104
+ def add_address(address)
105
+ @addresses << address
106
+ end
107
+
108
+ ##
109
+ # Iterate through all configured addresses,
110
+ # yielding SOCKS5BytestreamsServerStreamHost
111
+ # instances, which should be passed to
112
+ # SOCKS5BytestreamsInitiator#add_streamhost
113
+ #
114
+ # This will be automatically invoked if you pass an instance
115
+ # of SOCKS5BytestreamsServer to
116
+ # SOCKS5BytestreamsInitiator#add_streamhost
117
+ # my_jid:: [JID] My Jabber-ID
118
+ def each_streamhost(my_jid, &block)
119
+ @addresses.each { |address|
120
+ yield SOCKS5BytestreamsServerStreamHost.new(self, my_jid, address, @port)
121
+ }
122
+ end
123
+ end
124
+
125
+ ##
126
+ # A subclass of StreamHost which possesses a
127
+ # server attribute, to let SOCKS5BytestreamsInitiator
128
+ # know this is the local SOCKS5BytestreamsServer
129
+ class SOCKS5BytestreamsServerStreamHost < StreamHost
130
+ attr_reader :server
131
+ def initialize(server, jid=nil, host=nil, port=nil)
132
+ super(jid, host, port)
133
+ @server = server
134
+ end
135
+ end
136
+
137
+ ##
138
+ # This class will be instantiated by SOCKS5BytestreamsServer
139
+ # upon accepting a new connection
140
+ class SOCKS5BytestreamsPeer
141
+ attr_reader :address, :socket
142
+
143
+ ##
144
+ # Initialize a new peer
145
+ # socket:: [TCPSocket]
146
+ def initialize(socket)
147
+ @socket = socket
148
+ Jabber::debuglog("SOCKS5 BytestreamsServer: accepted peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]}")
149
+ end
150
+
151
+ ##
152
+ # Start handshake process
153
+ def start
154
+ if !@socket.respond_to? :getbyte
155
+ class << @socket; alias getbyte getc; end
156
+ end
157
+
158
+ auth_ver = @socket.getbyte
159
+ if auth_ver != 5
160
+ # Unsupported version
161
+ @socket.close
162
+ return
163
+ end
164
+
165
+ auth_nmethods = @socket.getbyte
166
+ auth_methods = @socket.read(auth_nmethods)
167
+ unless auth_methods.index("\x00")
168
+ # Client won't accept no authentication
169
+ @socket.write("\x05\xff")
170
+ @socket.close
171
+ return
172
+ end
173
+ @socket.write("\x05\x00")
174
+ Jabber::debuglog("SOCKS5 BytestreamsServer: peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]} authenticated")
175
+
176
+ req = @socket.read(4)
177
+ if req != "\x05\x01\x00\x03"
178
+ # Unknown version, command, reserved, address-type
179
+ @socket.close
180
+ return
181
+ end
182
+ req_addrlen = @socket.getbyte
183
+ req_addr = @socket.read(req_addrlen)
184
+ req_port = @socket.read(2)
185
+ if req_port != "\x00\x00"
186
+ # Port is not 0
187
+ @socket.write("\x05\x01")
188
+ @socket.close
189
+ return
190
+ end
191
+ @socket.write("\x05\x00\x00\x03#{req_addrlen.chr}#{req_addr}\x00\x00")
192
+ Jabber::debuglog("SOCKS5 BytestreamsServer: peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]} connected for #{req_addr}")
193
+
194
+ @address = req_addr
195
+ end
196
+ end
197
+ end
198
+ end