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,350 @@
1
+ -----------------------------------------------------------------------------
2
+ -- HTTP/1.1 client support for the Lua language.
3
+ -- LuaSocket toolkit.
4
+ -- Author: Diego Nehab
5
+ -- RCS ID: $Id$
6
+ -----------------------------------------------------------------------------
7
+
8
+ -----------------------------------------------------------------------------
9
+ -- Declare module and import dependencies
10
+ -------------------------------------------------------------------------------
11
+ local socket = require("socket")
12
+ local url = require("socket.url")
13
+ local ltn12 = require("ltn12")
14
+ local mime = require("mime")
15
+ local string = require("string")
16
+ local base = _G
17
+ local table = require("table")
18
+ module("socket.http")
19
+
20
+ -----------------------------------------------------------------------------
21
+ -- Program constants
22
+ -----------------------------------------------------------------------------
23
+ -- connection timeout in seconds
24
+ TIMEOUT = 60
25
+ -- default port for document retrieval
26
+ PORT = 80
27
+ -- user agent field sent in request
28
+ USERAGENT = socket._VERSION
29
+
30
+ -----------------------------------------------------------------------------
31
+ -- Reads MIME headers from a connection, unfolding where needed
32
+ -----------------------------------------------------------------------------
33
+ local function receiveheaders(sock, headers)
34
+ local line, name, value, err
35
+ headers = headers or {}
36
+ -- get first line
37
+ line, err = sock:receive()
38
+ if err then return nil, err end
39
+ -- headers go until a blank line is found
40
+ while line ~= "" do
41
+ -- get field-name and value
42
+ name, value = socket.skip(2, string.find(line, "^(.-):%s*(.*)"))
43
+ if not (name and value) then return nil, "malformed reponse headers" end
44
+ name = string.lower(name)
45
+ -- get next line (value might be folded)
46
+ line, err = sock:receive()
47
+ if err then return nil, err end
48
+ -- unfold any folded values
49
+ while string.find(line, "^%s") do
50
+ value = value .. line
51
+ line = sock:receive()
52
+ if err then return nil, err end
53
+ end
54
+ -- save pair in table
55
+ if headers[name] then headers[name] = headers[name] .. ", " .. value
56
+ else headers[name] = value end
57
+ end
58
+ return headers
59
+ end
60
+
61
+ -----------------------------------------------------------------------------
62
+ -- Extra sources and sinks
63
+ -----------------------------------------------------------------------------
64
+ socket.sourcet["http-chunked"] = function(sock, headers)
65
+ return base.setmetatable({
66
+ getfd = function() return sock:getfd() end,
67
+ dirty = function() return sock:dirty() end
68
+ }, {
69
+ __call = function()
70
+ -- get chunk size, skip extention
71
+ local line, err = sock:receive()
72
+ if err then return nil, err end
73
+ local size = base.tonumber(string.gsub(line, ";.*", ""), 16)
74
+ if not size then return nil, "invalid chunk size" end
75
+ -- was it the last chunk?
76
+ if size > 0 then
77
+ -- if not, get chunk and skip terminating CRLF
78
+ local chunk, err, part = sock:receive(size)
79
+ if chunk then sock:receive() end
80
+ return chunk, err
81
+ else
82
+ -- if it was, read trailers into headers table
83
+ headers, err = receiveheaders(sock, headers)
84
+ if not headers then return nil, err end
85
+ end
86
+ end
87
+ })
88
+ end
89
+
90
+ socket.sinkt["http-chunked"] = function(sock)
91
+ return base.setmetatable({
92
+ getfd = function() return sock:getfd() end,
93
+ dirty = function() return sock:dirty() end
94
+ }, {
95
+ __call = function(self, chunk, err)
96
+ if not chunk then return sock:send("0\r\n\r\n") end
97
+ local size = string.format("%X\r\n", string.len(chunk))
98
+ return sock:send(size .. chunk .. "\r\n")
99
+ end
100
+ })
101
+ end
102
+
103
+ -----------------------------------------------------------------------------
104
+ -- Low level HTTP API
105
+ -----------------------------------------------------------------------------
106
+ local metat = { __index = {} }
107
+
108
+ function open(host, port, create)
109
+ -- create socket with user connect function, or with default
110
+ local c = socket.try((create or socket.tcp)())
111
+ local h = base.setmetatable({ c = c }, metat)
112
+ -- create finalized try
113
+ h.try = socket.newtry(function() h:close() end)
114
+ -- set timeout before connecting
115
+ h.try(c:settimeout(TIMEOUT))
116
+ h.try(c:connect(host, port or PORT))
117
+ -- here everything worked
118
+ return h
119
+ end
120
+
121
+ function metat.__index:sendrequestline(method, uri)
122
+ local reqline = string.format("%s %s HTTP/1.1\r\n", method or "GET", uri)
123
+ return self.try(self.c:send(reqline))
124
+ end
125
+
126
+ function metat.__index:sendheaders(headers)
127
+ local h = "\r\n"
128
+ for i, v in base.pairs(headers) do
129
+ h = i .. ": " .. v .. "\r\n" .. h
130
+ end
131
+ self.try(self.c:send(h))
132
+ return 1
133
+ end
134
+
135
+ function metat.__index:sendbody(headers, source, step)
136
+ source = source or ltn12.source.empty()
137
+ step = step or ltn12.pump.step
138
+ -- if we don't know the size in advance, send chunked and hope for the best
139
+ local mode = "http-chunked"
140
+ if headers["content-length"] then mode = "keep-open" end
141
+ return self.try(ltn12.pump.all(source, socket.sink(mode, self.c), step))
142
+ end
143
+
144
+ function metat.__index:receivestatusline()
145
+ local status = self.try(self.c:receive(5))
146
+ -- identify HTTP/0.9 responses, which do not contain a status line
147
+ -- this is just a heuristic, but is what the RFC recommends
148
+ if status ~= "HTTP/" then return nil, status end
149
+ -- otherwise proceed reading a status line
150
+ status = self.try(self.c:receive("*l", status))
151
+ local code = socket.skip(2, string.find(status, "HTTP/%d*%.%d* (%d%d%d)"))
152
+ return self.try(base.tonumber(code), status)
153
+ end
154
+
155
+ function metat.__index:receiveheaders()
156
+ return self.try(receiveheaders(self.c))
157
+ end
158
+
159
+ function metat.__index:receivebody(headers, sink, step)
160
+ sink = sink or ltn12.sink.null()
161
+ step = step or ltn12.pump.step
162
+ local length = base.tonumber(headers["content-length"])
163
+ local t = headers["transfer-encoding"] -- shortcut
164
+ local mode = "default" -- connection close
165
+ if t and t ~= "identity" then mode = "http-chunked"
166
+ elseif base.tonumber(headers["content-length"]) then mode = "by-length" end
167
+ return self.try(ltn12.pump.all(socket.source(mode, self.c, length),
168
+ sink, step))
169
+ end
170
+
171
+ function metat.__index:receive09body(status, sink, step)
172
+ local source = ltn12.source.rewind(socket.source("until-closed", self.c))
173
+ source(status)
174
+ return self.try(ltn12.pump.all(source, sink, step))
175
+ end
176
+
177
+ function metat.__index:close()
178
+ return self.c:close()
179
+ end
180
+
181
+ -----------------------------------------------------------------------------
182
+ -- High level HTTP API
183
+ -----------------------------------------------------------------------------
184
+ local function adjusturi(reqt)
185
+ local u = reqt
186
+ -- if there is a proxy, we need the full url. otherwise, just a part.
187
+ if not reqt.proxy and not PROXY then
188
+ u = {
189
+ path = socket.try(reqt.path, "invalid path 'nil'"),
190
+ params = reqt.params,
191
+ query = reqt.query,
192
+ fragment = reqt.fragment
193
+ }
194
+ end
195
+ return url.build(u)
196
+ end
197
+
198
+ local function adjustproxy(reqt)
199
+ local proxy = reqt.proxy or PROXY
200
+ if proxy then
201
+ proxy = url.parse(proxy)
202
+ return proxy.host, proxy.port or 3128
203
+ else
204
+ return reqt.host, reqt.port
205
+ end
206
+ end
207
+
208
+ local function adjustheaders(reqt)
209
+ -- default headers
210
+ local lower = {
211
+ ["user-agent"] = USERAGENT,
212
+ ["host"] = reqt.host,
213
+ ["connection"] = "close, TE",
214
+ ["te"] = "trailers"
215
+ }
216
+ -- if we have authentication information, pass it along
217
+ if reqt.user and reqt.password then
218
+ lower["authorization"] =
219
+ "Basic " .. (mime.b64(reqt.user .. ":" .. reqt.password))
220
+ end
221
+ -- override with user headers
222
+ for i,v in base.pairs(reqt.headers or lower) do
223
+ lower[string.lower(i)] = v
224
+ end
225
+ return lower
226
+ end
227
+
228
+ -- default url parts
229
+ local default = {
230
+ host = "",
231
+ port = PORT,
232
+ path ="/",
233
+ scheme = "http"
234
+ }
235
+
236
+ local function adjustrequest(reqt)
237
+ -- parse url if provided
238
+ local nreqt = reqt.url and url.parse(reqt.url, default) or {}
239
+ -- explicit components override url
240
+ for i,v in base.pairs(reqt) do nreqt[i] = v end
241
+ if nreqt.port == "" then nreqt.port = 80 end
242
+ socket.try(nreqt.host and nreqt.host ~= "",
243
+ "invalid host '" .. base.tostring(nreqt.host) .. "'")
244
+ -- compute uri if user hasn't overriden
245
+ nreqt.uri = reqt.uri or adjusturi(nreqt)
246
+ -- ajust host and port if there is a proxy
247
+ nreqt.host, nreqt.port = adjustproxy(nreqt)
248
+ -- adjust headers in request
249
+ nreqt.headers = adjustheaders(nreqt)
250
+ return nreqt
251
+ end
252
+
253
+ local function shouldredirect(reqt, code, headers)
254
+ return headers.location and
255
+ string.gsub(headers.location, "%s", "") ~= "" and
256
+ (reqt.redirect ~= false) and
257
+ (code == 301 or code == 302) and
258
+ (not reqt.method or reqt.method == "GET" or reqt.method == "HEAD")
259
+ and (not reqt.nredirects or reqt.nredirects < 5)
260
+ end
261
+
262
+ local function shouldreceivebody(reqt, code)
263
+ if reqt.method == "HEAD" then return nil end
264
+ if code == 204 or code == 304 then return nil end
265
+ if code >= 100 and code < 200 then return nil end
266
+ return 1
267
+ end
268
+
269
+ -- forward declarations
270
+ local trequest, tredirect
271
+
272
+ function tredirect(reqt, location)
273
+ local result, code, headers, status = trequest {
274
+ -- the RFC says the redirect URL has to be absolute, but some
275
+ -- servers do not respect that
276
+ url = url.absolute(reqt.url, location),
277
+ source = reqt.source,
278
+ sink = reqt.sink,
279
+ headers = reqt.headers,
280
+ proxy = reqt.proxy,
281
+ nredirects = (reqt.nredirects or 0) + 1,
282
+ create = reqt.create
283
+ }
284
+ -- pass location header back as a hint we redirected
285
+ headers = headers or {}
286
+ headers.location = headers.location or location
287
+ return result, code, headers, status
288
+ end
289
+
290
+ function trequest(reqt)
291
+ -- we loop until we get what we want, or
292
+ -- until we are sure there is no way to get it
293
+ local nreqt = adjustrequest(reqt)
294
+ local h = open(nreqt.host, nreqt.port, nreqt.create)
295
+ -- send request line and headers
296
+ h:sendrequestline(nreqt.method, nreqt.uri)
297
+ h:sendheaders(nreqt.headers)
298
+ -- if there is a body, send it
299
+ if nreqt.source then
300
+ h:sendbody(nreqt.headers, nreqt.source, nreqt.step)
301
+ end
302
+ local code, status = h:receivestatusline()
303
+ -- if it is an HTTP/0.9 server, simply get the body and we are done
304
+ if not code then
305
+ h:receive09body(status, nreqt.sink, nreqt.step)
306
+ return 1, 200
307
+ end
308
+ local headers
309
+ -- ignore any 100-continue messages
310
+ while code == 100 do
311
+ headers = h:receiveheaders()
312
+ code, status = h:receivestatusline()
313
+ end
314
+ headers = h:receiveheaders()
315
+ -- at this point we should have a honest reply from the server
316
+ -- we can't redirect if we already used the source, so we report the error
317
+ if shouldredirect(nreqt, code, headers) and not nreqt.source then
318
+ h:close()
319
+ return tredirect(reqt, headers.location)
320
+ end
321
+ -- here we are finally done
322
+ if shouldreceivebody(nreqt, code) then
323
+ h:receivebody(headers, nreqt.sink, nreqt.step)
324
+ end
325
+ h:close()
326
+ return 1, code, headers, status
327
+ end
328
+
329
+ local function srequest(u, b)
330
+ local t = {}
331
+ local reqt = {
332
+ url = u,
333
+ sink = ltn12.sink.table(t)
334
+ }
335
+ if b then
336
+ reqt.source = ltn12.source.string(b)
337
+ reqt.headers = {
338
+ ["content-length"] = string.len(b),
339
+ ["content-type"] = "application/x-www-form-urlencoded"
340
+ }
341
+ reqt.method = "POST"
342
+ end
343
+ local code, headers, status = socket.skip(1, trequest(reqt))
344
+ return table.concat(t), code, headers, status
345
+ end
346
+
347
+ request = socket.protect(function(reqt, body)
348
+ if base.type(reqt) == "string" then return srequest(reqt, body)
349
+ else return trequest(reqt) end
350
+ end)
@@ -0,0 +1,251 @@
1
+ -----------------------------------------------------------------------------
2
+ -- SMTP client support for the Lua language.
3
+ -- LuaSocket toolkit.
4
+ -- Author: Diego Nehab
5
+ -- RCS ID: $Id$
6
+ -----------------------------------------------------------------------------
7
+
8
+ -----------------------------------------------------------------------------
9
+ -- Declare module and import dependencies
10
+ -----------------------------------------------------------------------------
11
+ local base = _G
12
+ local coroutine = require("coroutine")
13
+ local string = require("string")
14
+ local math = require("math")
15
+ local os = require("os")
16
+ local socket = require("socket")
17
+ local tp = require("socket.tp")
18
+ local ltn12 = require("ltn12")
19
+ local mime = require("mime")
20
+ module("socket.smtp")
21
+
22
+ -----------------------------------------------------------------------------
23
+ -- Program constants
24
+ -----------------------------------------------------------------------------
25
+ -- timeout for connection
26
+ TIMEOUT = 60
27
+ -- default server used to send e-mails
28
+ SERVER = "localhost"
29
+ -- default port
30
+ PORT = 25
31
+ -- domain used in HELO command and default sendmail
32
+ -- If we are under a CGI, try to get from environment
33
+ DOMAIN = os.getenv("SERVER_NAME") or "localhost"
34
+ -- default time zone (means we don't know)
35
+ ZONE = "-0000"
36
+
37
+ ---------------------------------------------------------------------------
38
+ -- Low level SMTP API
39
+ -----------------------------------------------------------------------------
40
+ local metat = { __index = {} }
41
+
42
+ function metat.__index:greet(domain)
43
+ self.try(self.tp:check("2.."))
44
+ self.try(self.tp:command("EHLO", domain or DOMAIN))
45
+ return socket.skip(1, self.try(self.tp:check("2..")))
46
+ end
47
+
48
+ function metat.__index:mail(from)
49
+ self.try(self.tp:command("MAIL", "FROM:" .. from))
50
+ return self.try(self.tp:check("2.."))
51
+ end
52
+
53
+ function metat.__index:rcpt(to)
54
+ self.try(self.tp:command("RCPT", "TO:" .. to))
55
+ return self.try(self.tp:check("2.."))
56
+ end
57
+
58
+ function metat.__index:data(src, step)
59
+ self.try(self.tp:command("DATA"))
60
+ self.try(self.tp:check("3.."))
61
+ self.try(self.tp:source(src, step))
62
+ self.try(self.tp:send("\r\n.\r\n"))
63
+ return self.try(self.tp:check("2.."))
64
+ end
65
+
66
+ function metat.__index:quit()
67
+ self.try(self.tp:command("QUIT"))
68
+ return self.try(self.tp:check("2.."))
69
+ end
70
+
71
+ function metat.__index:close()
72
+ return self.tp:close()
73
+ end
74
+
75
+ function metat.__index:login(user, password)
76
+ self.try(self.tp:command("AUTH", "LOGIN"))
77
+ self.try(self.tp:check("3.."))
78
+ self.try(self.tp:command(mime.b64(user)))
79
+ self.try(self.tp:check("3.."))
80
+ self.try(self.tp:command(mime.b64(password)))
81
+ return self.try(self.tp:check("2.."))
82
+ end
83
+
84
+ function metat.__index:plain(user, password)
85
+ local auth = "PLAIN " .. mime.b64("\0" .. user .. "\0" .. password)
86
+ self.try(self.tp:command("AUTH", auth))
87
+ return self.try(self.tp:check("2.."))
88
+ end
89
+
90
+ function metat.__index:auth(user, password, ext)
91
+ if not user or not password then return 1 end
92
+ if string.find(ext, "AUTH[^\n]+LOGIN") then
93
+ return self:login(user, password)
94
+ elseif string.find(ext, "AUTH[^\n]+PLAIN") then
95
+ return self:plain(user, password)
96
+ else
97
+ self.try(nil, "authentication not supported")
98
+ end
99
+ end
100
+
101
+ -- send message or throw an exception
102
+ function metat.__index:send(mailt)
103
+ self:mail(mailt.from)
104
+ if base.type(mailt.rcpt) == "table" then
105
+ for i,v in base.ipairs(mailt.rcpt) do
106
+ self:rcpt(v)
107
+ end
108
+ else
109
+ self:rcpt(mailt.rcpt)
110
+ end
111
+ self:data(ltn12.source.chain(mailt.source, mime.stuff()), mailt.step)
112
+ end
113
+
114
+ function open(server, port, create)
115
+ local tp = socket.try(tp.connect(server or SERVER, port or PORT,
116
+ TIMEOUT, create))
117
+ local s = base.setmetatable({tp = tp}, metat)
118
+ -- make sure tp is closed if we get an exception
119
+ s.try = socket.newtry(function()
120
+ s:close()
121
+ end)
122
+ return s
123
+ end
124
+
125
+ -- convert headers to lowercase
126
+ local function lower_headers(headers)
127
+ local lower = {}
128
+ for i,v in base.pairs(headers or lower) do
129
+ lower[string.lower(i)] = v
130
+ end
131
+ return lower
132
+ end
133
+
134
+ ---------------------------------------------------------------------------
135
+ -- Multipart message source
136
+ -----------------------------------------------------------------------------
137
+ -- returns a hopefully unique mime boundary
138
+ local seqno = 0
139
+ local function newboundary()
140
+ seqno = seqno + 1
141
+ return string.format('%s%05d==%05u', os.date('%d%m%Y%H%M%S'),
142
+ math.random(0, 99999), seqno)
143
+ end
144
+
145
+ -- send_message forward declaration
146
+ local send_message
147
+
148
+ -- yield the headers all at once, it's faster
149
+ local function send_headers(headers)
150
+ local h = "\r\n"
151
+ for i,v in base.pairs(headers) do
152
+ h = i .. ': ' .. v .. "\r\n" .. h
153
+ end
154
+ coroutine.yield(h)
155
+ end
156
+
157
+ -- yield multipart message body from a multipart message table
158
+ local function send_multipart(mesgt)
159
+ -- make sure we have our boundary and send headers
160
+ local bd = newboundary()
161
+ local headers = lower_headers(mesgt.headers or {})
162
+ headers['content-type'] = headers['content-type'] or 'multipart/mixed'
163
+ headers['content-type'] = headers['content-type'] ..
164
+ '; boundary="' .. bd .. '"'
165
+ send_headers(headers)
166
+ -- send preamble
167
+ if mesgt.body.preamble then
168
+ coroutine.yield(mesgt.body.preamble)
169
+ coroutine.yield("\r\n")
170
+ end
171
+ -- send each part separated by a boundary
172
+ for i, m in base.ipairs(mesgt.body) do
173
+ coroutine.yield("\r\n--" .. bd .. "\r\n")
174
+ send_message(m)
175
+ end
176
+ -- send last boundary
177
+ coroutine.yield("\r\n--" .. bd .. "--\r\n\r\n")
178
+ -- send epilogue
179
+ if mesgt.body.epilogue then
180
+ coroutine.yield(mesgt.body.epilogue)
181
+ coroutine.yield("\r\n")
182
+ end
183
+ end
184
+
185
+ -- yield message body from a source
186
+ local function send_source(mesgt)
187
+ -- make sure we have a content-type
188
+ local headers = lower_headers(mesgt.headers or {})
189
+ headers['content-type'] = headers['content-type'] or
190
+ 'text/plain; charset="iso-8859-1"'
191
+ send_headers(headers)
192
+ -- send body from source
193
+ while true do
194
+ local chunk, err = mesgt.body()
195
+ if err then coroutine.yield(nil, err)
196
+ elseif chunk then coroutine.yield(chunk)
197
+ else break end
198
+ end
199
+ end
200
+
201
+ -- yield message body from a string
202
+ local function send_string(mesgt)
203
+ -- make sure we have a content-type
204
+ local headers = lower_headers(mesgt.headers or {})
205
+ headers['content-type'] = headers['content-type'] or
206
+ 'text/plain; charset="iso-8859-1"'
207
+ send_headers(headers)
208
+ -- send body from string
209
+ coroutine.yield(mesgt.body)
210
+ end
211
+
212
+ -- message source
213
+ function send_message(mesgt)
214
+ if base.type(mesgt.body) == "table" then send_multipart(mesgt)
215
+ elseif base.type(mesgt.body) == "function" then send_source(mesgt)
216
+ else send_string(mesgt) end
217
+ end
218
+
219
+ -- set defaul headers
220
+ local function adjust_headers(mesgt)
221
+ local lower = lower_headers(mesgt.headers)
222
+ lower["date"] = lower["date"] or
223
+ os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or ZONE)
224
+ lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
225
+ -- this can't be overriden
226
+ lower["mime-version"] = "1.0"
227
+ return lower
228
+ end
229
+
230
+ function message(mesgt)
231
+ mesgt.headers = adjust_headers(mesgt)
232
+ -- create and return message source
233
+ local co = coroutine.create(function() send_message(mesgt) end)
234
+ return function()
235
+ local ret, a, b = coroutine.resume(co)
236
+ if ret then return a, b
237
+ else return nil, a end
238
+ end
239
+ end
240
+
241
+ ---------------------------------------------------------------------------
242
+ -- High level SMTP API
243
+ -----------------------------------------------------------------------------
244
+ send = socket.protect(function(mailt)
245
+ local s = open(mailt.server, mailt.port, mailt.create)
246
+ local ext = s:greet(mailt.domain)
247
+ s:auth(mailt.user, mailt.password, ext)
248
+ s:send(mailt)
249
+ s:quit()
250
+ return s:close()
251
+ end)