rufus-lua-win 5.1.5

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 (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. metadata +529 -0
@@ -0,0 +1,20 @@
1
+ --- Binary data utilities
2
+ module ("bin", package.seeall)
3
+
4
+ --- Turn a little-endian word into a number
5
+ function le_to_number (s)
6
+ local res = 0
7
+ for i = #s, 1, -1 do
8
+ res = res * 256 + string.byte (s, i)
9
+ end
10
+ return res
11
+ end
12
+
13
+ --- Turn a little-endian word into a hex string
14
+ function le_to_hex (s)
15
+ local res = ""
16
+ for i = 1, #s do
17
+ res = res .. string.format ("%.2x", string.byte (s, i))
18
+ end
19
+ return res
20
+ end
@@ -0,0 +1,543 @@
1
+ -------------------------------------------------------------------------------
2
+ -- Copas - Coroutine Oriented Portable Asynchronous Services
3
+ --
4
+ -- A dispatcher based on coroutines that can be used by TCP/IP servers.
5
+ -- Uses LuaSocket as the interface with the TCP/IP stack.
6
+ --
7
+ -- Authors: Andre Carregal, Javier Guerra, and Fabio Mascarenhas
8
+ -- Contributors: Diego Nehab, Mike Pall, David Burgess, Leonardo Godinho,
9
+ -- Thomas Harning Jr., and Gary NG
10
+ --
11
+ -- Copyright 2005 - Kepler Project (www.keplerproject.org)
12
+ --
13
+ -- $Id: copas.lua,v 1.37 2009/04/07 22:09:52 carregal Exp $
14
+ -------------------------------------------------------------------------------
15
+
16
+ if package.loaded["socket.http"] then
17
+ error("you must require copas before require'ing socket.http")
18
+ end
19
+
20
+ local socket = require "socket"
21
+
22
+ require "coxpcall"
23
+
24
+ local WATCH_DOG_TIMEOUT = 120
25
+ local UDP_DATAGRAM_MAX = 8192
26
+
27
+ -- Redefines LuaSocket functions with coroutine safe versions
28
+ -- (this allows the use of socket.http from within copas)
29
+ local function statusHandler(status, ...)
30
+ if status then return ... end
31
+ local err = (...)
32
+ if type(err) == "table" then
33
+ return nil, err[1]
34
+ else
35
+ error(err)
36
+ end
37
+ end
38
+
39
+ function socket.protect(func)
40
+ return function (...)
41
+ return statusHandler(copcall(func, ...))
42
+ end
43
+ end
44
+
45
+ function socket.newtry(finalizer)
46
+ return function (...)
47
+ local status = (...)
48
+ if not status then
49
+ copcall(finalizer, select(2, ...))
50
+ error({ (select(2, ...)) }, 0)
51
+ end
52
+ return ...
53
+ end
54
+ end
55
+
56
+ -- end of LuaSocket redefinitions
57
+
58
+
59
+ module ("copas", package.seeall)
60
+
61
+ -- Meta information is public even if beginning with an "_"
62
+ _COPYRIGHT = "Copyright (C) 2005-2010 Kepler Project"
63
+ _DESCRIPTION = "Coroutine Oriented Portable Asynchronous Services"
64
+ _VERSION = "Copas 1.1.7"
65
+
66
+ -- Close the socket associated with the current connection after the handler finishes
67
+ autoclose = true
68
+
69
+ -------------------------------------------------------------------------------
70
+ -- Simple set implementation based on LuaSocket's tinyirc.lua example
71
+ -- adds a FIFO queue for each value in the set
72
+ -------------------------------------------------------------------------------
73
+ local function newset()
74
+ local reverse = {}
75
+ local set = {}
76
+ local q = {}
77
+ setmetatable(set, { __index = {
78
+ insert = function(set, value)
79
+ if not reverse[value] then
80
+ set[#set + 1] = value
81
+ reverse[value] = #set
82
+ end
83
+ end,
84
+
85
+ remove = function(set, value)
86
+ local index = reverse[value]
87
+ if index then
88
+ reverse[value] = nil
89
+ local top = set[#set]
90
+ set[#set] = nil
91
+ if top ~= value then
92
+ reverse[top] = index
93
+ set[index] = top
94
+ end
95
+ end
96
+ end,
97
+
98
+ push = function (set, key, itm)
99
+ local qKey = q[key]
100
+ if qKey == nil then
101
+ q[key] = {itm}
102
+ else
103
+ qKey[#qKey + 1] = itm
104
+ end
105
+ end,
106
+
107
+ pop = function (set, key)
108
+ local t = q[key]
109
+ if t ~= nil then
110
+ local ret = table.remove (t, 1)
111
+ if t[1] == nil then
112
+ q[key] = nil
113
+ end
114
+ return ret
115
+ end
116
+ end
117
+ }})
118
+ return set
119
+ end
120
+
121
+ local _servers = newset() -- servers being handled
122
+ local _reading_log = {}
123
+ local _writing_log = {}
124
+
125
+ local _reading = newset() -- sockets currently being read
126
+ local _writing = newset() -- sockets currently being written
127
+
128
+ -------------------------------------------------------------------------------
129
+ -- Coroutine based socket I/O functions.
130
+ -------------------------------------------------------------------------------
131
+ -- reads a pattern from a client and yields to the reading set on timeouts
132
+ -- UDP: a UDP socket expects a second argument to be a number, so it MUST
133
+ -- be provided as the 'pattern' below defaults to a string. Will throw a
134
+ -- 'bad argument' error if omitted.
135
+ function receive(client, pattern, part)
136
+ local s, err
137
+ pattern = pattern or "*l"
138
+ repeat
139
+ s, err, part = client:receive(pattern, part)
140
+ if s or err ~= "timeout" then
141
+ _reading_log[client] = nil
142
+ return s, err, part
143
+ end
144
+ _reading_log[client] = os.time()
145
+ coroutine.yield(client, _reading)
146
+ until false
147
+ end
148
+
149
+ -- receives data from a client over UDP. Not available for TCP.
150
+ -- (this is a copy of receive() method, adapted for receivefrom() use)
151
+ function receivefrom(client, size)
152
+ local s, err, port
153
+ size = size or UDP_DATAGRAM_MAX
154
+ repeat
155
+ s, err, port = client:receivefrom(size) -- upon success err holds ip address
156
+ if s or err ~= "timeout" then
157
+ _reading_log[client] = nil
158
+ return s, err, port
159
+ end
160
+ _reading_log[client] = os.time()
161
+ coroutine.yield(client, _reading)
162
+ until false
163
+ end
164
+
165
+ -- same as above but with special treatment when reading chunks,
166
+ -- unblocks on any data received.
167
+ function receivePartial(client, pattern)
168
+ local s, err, part
169
+ pattern = pattern or "*l"
170
+ repeat
171
+ s, err, part = client:receive(pattern)
172
+ if s or ( (type(pattern)=="number") and part~="" and part ~=nil ) or
173
+ err ~= "timeout" then
174
+ _reading_log[client] = nil
175
+ return s, err, part
176
+ end
177
+ _reading_log[client] = os.time()
178
+ coroutine.yield(client, _reading)
179
+ until false
180
+ end
181
+
182
+ -- sends data to a client. The operation is buffered and
183
+ -- yields to the writing set on timeouts
184
+ -- Note: from and to parameters will be ignored by/for UDP sockets
185
+ function send(client,data, from, to)
186
+ local s, err,sent
187
+ from = from or 1
188
+ local lastIndex = from - 1
189
+
190
+ repeat
191
+ s, err, lastIndex = client:send(data, lastIndex + 1, to)
192
+ -- adds extra corrotine swap
193
+ -- garantees that high throuput dont take other threads to starvation
194
+ if (math.random(100) > 90) then
195
+ _writing_log[client] = os.time()
196
+ coroutine.yield(client, _writing)
197
+ end
198
+ if s or err ~= "timeout" then
199
+ _writing_log[client] = nil
200
+ return s, err,lastIndex
201
+ end
202
+ _writing_log[client] = os.time()
203
+ coroutine.yield(client, _writing)
204
+ until false
205
+ end
206
+
207
+ -- sends data to a client over UDP. Not available for TCP.
208
+ -- (this is a copy of send() method, adapted for sendto() use)
209
+ function sendto(client,data, ip, port)
210
+ local s, err,sent
211
+
212
+ repeat
213
+ s, err = client:sendto(data, ip, port)
214
+ -- adds extra corrotine swap
215
+ -- garantees that high throuput dont take other threads to starvation
216
+ if (math.random(100) > 90) then
217
+ _writing_log[client] = os.time()
218
+ coroutine.yield(client, _writing)
219
+ end
220
+ if s or err ~= "timeout" then
221
+ _writing_log[client] = nil
222
+ return s, err
223
+ end
224
+ _writing_log[client] = os.time()
225
+ coroutine.yield(client, _writing)
226
+ until false
227
+ end
228
+
229
+ -- waits until connection is completed
230
+ function connect(skt, host, port)
231
+ skt:settimeout(0)
232
+ local ret, err
233
+ repeat
234
+ ret, err = skt:connect (host, port)
235
+ if ret or err ~= "timeout" then
236
+ _writing_log[skt] = nil
237
+ return ret, err
238
+ end
239
+ _writing_log[skt] = os.time()
240
+ coroutine.yield(skt, _writing)
241
+ until false
242
+ return ret, err
243
+ end
244
+
245
+ -- flushes a client write buffer (deprecated)
246
+ function flush(client)
247
+ end
248
+
249
+ -- wraps a TCP socket to use Copas methods (send, receive, flush and settimeout)
250
+ local _skt_mt = {__index = {
251
+ send = function (self, data, from, to)
252
+ return send (self.socket, data, from, to)
253
+ end,
254
+
255
+ receive = function (self, pattern)
256
+ if (self.timeout==0) then
257
+ return receivePartial(self.socket, pattern)
258
+ end
259
+ return receive (self.socket, pattern)
260
+ end,
261
+
262
+ flush = function (self)
263
+ return flush (self.socket)
264
+ end,
265
+
266
+ settimeout = function (self,time)
267
+ self.timeout=time
268
+ return
269
+ end,
270
+ }}
271
+
272
+ -- wraps a UDP socket, copy of TCP one adapted for UDP.
273
+ -- Mainly adds sendto() and receivefrom()
274
+ local _skt_mt_udp = {__index = {
275
+ send = function (self, data)
276
+ return send (self.socket, data)
277
+ end,
278
+
279
+ sendto = function (self, data, ip, port)
280
+ return sendto (self.socket, data, ip, port)
281
+ end,
282
+
283
+ receive = function (self, size)
284
+ return receive (self.socket, (size or UDP_DATAGRAM_MAX))
285
+ end,
286
+
287
+ receivefrom = function (self, size)
288
+ return receivefrom (self.socket, (size or UDP_DATAGRAM_MAX))
289
+ end,
290
+
291
+ flush = function (self)
292
+ return flush (self.socket)
293
+ end,
294
+
295
+ settimeout = function (self,time)
296
+ self.timeout=time
297
+ return
298
+ end,
299
+ }}
300
+
301
+ function wrap (skt)
302
+ if string.sub(tostring(skt),1,3) == "udp" then
303
+ return setmetatable ({socket = skt}, _skt_mt_udp)
304
+ else
305
+ return setmetatable ({socket = skt}, _skt_mt)
306
+ end
307
+ end
308
+
309
+ --------------------------------------------------
310
+ -- Error handling
311
+ --------------------------------------------------
312
+
313
+ local _errhandlers = {} -- error handler per coroutine
314
+
315
+ function setErrorHandler (err)
316
+ local co = coroutine.running()
317
+ if co then
318
+ _errhandlers [co] = err
319
+ end
320
+ end
321
+
322
+ local function _deferror (msg, co, skt)
323
+ print (msg, co, skt)
324
+ end
325
+
326
+ -------------------------------------------------------------------------------
327
+ -- Thread handling
328
+ -------------------------------------------------------------------------------
329
+
330
+ local function _doTick (co, skt, ...)
331
+ if not co then return end
332
+
333
+ local ok, res, new_q = coroutine.resume(co, skt, ...)
334
+
335
+ if ok and res and new_q then
336
+ new_q:insert (res)
337
+ new_q:push (res, co)
338
+ else
339
+ if not ok then copcall (_errhandlers [co] or _deferror, res, co, skt) end
340
+ if skt and autoclose then skt:close() end
341
+ _errhandlers [co] = nil
342
+ end
343
+ end
344
+
345
+ -- accepts a connection on socket input
346
+ local function _accept(input, handler)
347
+ local client = input:accept()
348
+ if client then
349
+ client:settimeout(0)
350
+ local co = coroutine.create(handler)
351
+ _doTick (co, client)
352
+ --_reading:insert(client)
353
+ end
354
+ return client
355
+ end
356
+
357
+ -- handle threads on a queue
358
+ local function _tickRead (skt)
359
+ _doTick (_reading:pop (skt), skt)
360
+ end
361
+
362
+ local function _tickWrite (skt)
363
+ _doTick (_writing:pop (skt), skt)
364
+ end
365
+
366
+ -------------------------------------------------------------------------------
367
+ -- Adds a server/handler pair to Copas dispatcher
368
+ -------------------------------------------------------------------------------
369
+ local function addTCPserver(server, handler, timeout)
370
+ server:settimeout(timeout or 0.1)
371
+ _servers[server] = handler
372
+ _reading:insert(server)
373
+ end
374
+
375
+ local function addUDPserver(server, handler, timeout)
376
+ server:settimeout(timeout or 0)
377
+ local co = coroutine.create(handler)
378
+ _reading:insert(server)
379
+ _doTick (co, server)
380
+ end
381
+
382
+ function addserver(server, handler, timeout)
383
+ if string.sub(tostring(server),1,3) == "udp" then
384
+ addUDPserver(server, handler, timeout)
385
+ else
386
+ addTCPserver(server, handler, timeout)
387
+ end
388
+ end
389
+ -------------------------------------------------------------------------------
390
+ -- Adds an new courotine thread to Copas dispatcher
391
+ -------------------------------------------------------------------------------
392
+ function addthread(thread, ...)
393
+ if type(thread) ~= "thread" then
394
+ thread = coroutine.create(thread)
395
+ end
396
+ _doTick (thread, nil, ...)
397
+ return thread
398
+ end
399
+
400
+ -------------------------------------------------------------------------------
401
+ -- tasks registering
402
+ -------------------------------------------------------------------------------
403
+
404
+ local _tasks = {}
405
+
406
+ local function addtaskRead (tsk)
407
+ -- lets tasks call the default _tick()
408
+ tsk.def_tick = _tickRead
409
+
410
+ _tasks [tsk] = true
411
+ end
412
+
413
+ local function addtaskWrite (tsk)
414
+ -- lets tasks call the default _tick()
415
+ tsk.def_tick = _tickWrite
416
+
417
+ _tasks [tsk] = true
418
+ end
419
+
420
+ local function tasks ()
421
+ return next, _tasks
422
+ end
423
+
424
+ -------------------------------------------------------------------------------
425
+ -- main tasks: manage readable and writable socket sets
426
+ -------------------------------------------------------------------------------
427
+ -- a task to check ready to read events
428
+ local _readable_t = {
429
+ events = function(self)
430
+ local i = 0
431
+ return function ()
432
+ i = i + 1
433
+ return self._evs [i]
434
+ end
435
+ end,
436
+
437
+ tick = function (self, input)
438
+ local handler = _servers[input]
439
+ if handler then
440
+ input = _accept(input, handler)
441
+ else
442
+ _reading:remove (input)
443
+ self.def_tick (input)
444
+ end
445
+ end
446
+ }
447
+
448
+ addtaskRead (_readable_t)
449
+
450
+
451
+ -- a task to check ready to write events
452
+ local _writable_t = {
453
+ events = function (self)
454
+ local i = 0
455
+ return function ()
456
+ i = i + 1
457
+ return self._evs [i]
458
+ end
459
+ end,
460
+
461
+ tick = function (self, output)
462
+ _writing:remove (output)
463
+ self.def_tick (output)
464
+ end
465
+ }
466
+
467
+ addtaskWrite (_writable_t)
468
+
469
+ local last_cleansing = 0
470
+
471
+ -------------------------------------------------------------------------------
472
+ -- Checks for reads and writes on sockets
473
+ -------------------------------------------------------------------------------
474
+ local function _select (timeout)
475
+ local err
476
+ local readable={}
477
+ local writable={}
478
+ local r={}
479
+ local w={}
480
+ local now = os.time()
481
+ local duration = os.difftime
482
+
483
+ _readable_t._evs, _writable_t._evs, err = socket.select(_reading, _writing, timeout)
484
+ local r_evs, w_evs = _readable_t._evs, _writable_t._evs
485
+
486
+ if duration(now, last_cleansing) > WATCH_DOG_TIMEOUT then
487
+ last_cleansing = now
488
+ for k,v in pairs(_reading_log) do
489
+ if not r_evs[k] and duration(now, v) > WATCH_DOG_TIMEOUT then
490
+ _reading_log[k] = nil
491
+ r_evs[#r_evs + 1] = k
492
+ r_evs[k] = #r_evs
493
+ end
494
+ end
495
+
496
+ for k,v in pairs(_writing_log) do
497
+ if not w_evs[k] and duration(now, v) > WATCH_DOG_TIMEOUT then
498
+ _writing_log[k] = nil
499
+ w_evs[#w_evs + 1] = k
500
+ w_evs[k] = #w_evs
501
+ end
502
+ end
503
+ end
504
+
505
+ if err == "timeout" and #r_evs + #w_evs > 0 then
506
+ return nil
507
+ else
508
+ return err
509
+ end
510
+ end
511
+
512
+
513
+ -------------------------------------------------------------------------------
514
+ -- Dispatcher loop step.
515
+ -- Listen to client requests and handles them
516
+ -- Returns false if no data was handled (timeout), or true if there was data
517
+ -- handled (or nil + error message)
518
+ -------------------------------------------------------------------------------
519
+ function step(timeout)
520
+ local err = _select (timeout)
521
+ if err == "timeout" then return false end
522
+
523
+ if err then
524
+ error(err)
525
+ end
526
+
527
+ for tsk in tasks() do
528
+ for ev in tsk:events() do
529
+ tsk:tick (ev)
530
+ end
531
+ end
532
+ return true
533
+ end
534
+
535
+ -------------------------------------------------------------------------------
536
+ -- Dispatcher endless loop.
537
+ -- Listen to client requests and handles them forever
538
+ -------------------------------------------------------------------------------
539
+ function loop(timeout)
540
+ while true do
541
+ step(timeout)
542
+ end
543
+ end