noderb 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. data/LICENSE +19 -0
  2. data/README.md +25 -0
  3. data/ext/noderb_extension/extconf.rb +11 -0
  4. data/ext/noderb_extension/libuv/AUTHORS +11 -0
  5. data/ext/noderb_extension/libuv/LICENSE +48 -0
  6. data/ext/noderb_extension/libuv/Makefile +119 -0
  7. data/ext/noderb_extension/libuv/README +45 -0
  8. data/ext/noderb_extension/libuv/build/all.gyp +254 -0
  9. data/ext/noderb_extension/libuv/build/common.gypi +13 -0
  10. data/ext/noderb_extension/libuv/build/gyp_uv +43 -0
  11. data/ext/noderb_extension/libuv/config-mingw.mk +67 -0
  12. data/ext/noderb_extension/libuv/config-unix.mk +121 -0
  13. data/ext/noderb_extension/libuv/create-msvs-files.bat +14 -0
  14. data/ext/noderb_extension/libuv/deps/pthread-win32/ANNOUNCE +482 -0
  15. data/ext/noderb_extension/libuv/deps/pthread-win32/BUGS +141 -0
  16. data/ext/noderb_extension/libuv/deps/pthread-win32/Bmakefile +268 -0
  17. data/ext/noderb_extension/libuv/deps/pthread-win32/CONTRIBUTORS +140 -0
  18. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING +150 -0
  19. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING.LIB +504 -0
  20. data/ext/noderb_extension/libuv/deps/pthread-win32/ChangeLog +5194 -0
  21. data/ext/noderb_extension/libuv/deps/pthread-win32/FAQ +451 -0
  22. data/ext/noderb_extension/libuv/deps/pthread-win32/GNUmakefile +593 -0
  23. data/ext/noderb_extension/libuv/deps/pthread-win32/MAINTAINERS +4 -0
  24. data/ext/noderb_extension/libuv/deps/pthread-win32/Makefile +516 -0
  25. data/ext/noderb_extension/libuv/deps/pthread-win32/NEWS +1245 -0
  26. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile +24 -0
  27. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile.tests +260 -0
  28. data/ext/noderb_extension/libuv/deps/pthread-win32/PROGRESS +4 -0
  29. data/ext/noderb_extension/libuv/deps/pthread-win32/README +601 -0
  30. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Borland +57 -0
  31. data/ext/noderb_extension/libuv/deps/pthread-win32/README.CV +3036 -0
  32. data/ext/noderb_extension/libuv/deps/pthread-win32/README.NONPORTABLE +783 -0
  33. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Watcom +62 -0
  34. data/ext/noderb_extension/libuv/deps/pthread-win32/README.WinCE +6 -0
  35. data/ext/noderb_extension/libuv/deps/pthread-win32/TODO +7 -0
  36. data/ext/noderb_extension/libuv/deps/pthread-win32/WinCE-PORT +222 -0
  37. data/ext/noderb_extension/libuv/deps/pthread-win32/attr.c +53 -0
  38. data/ext/noderb_extension/libuv/deps/pthread-win32/autostatic.c +69 -0
  39. data/ext/noderb_extension/libuv/deps/pthread-win32/barrier.c +47 -0
  40. data/ext/noderb_extension/libuv/deps/pthread-win32/build/all.gyp +207 -0
  41. data/ext/noderb_extension/libuv/deps/pthread-win32/builddmc.bat +9 -0
  42. data/ext/noderb_extension/libuv/deps/pthread-win32/cancel.c +44 -0
  43. data/ext/noderb_extension/libuv/deps/pthread-win32/cleanup.c +148 -0
  44. data/ext/noderb_extension/libuv/deps/pthread-win32/condvar.c +50 -0
  45. data/ext/noderb_extension/libuv/deps/pthread-win32/config.h +153 -0
  46. data/ext/noderb_extension/libuv/deps/pthread-win32/context.h +74 -0
  47. data/ext/noderb_extension/libuv/deps/pthread-win32/create.c +308 -0
  48. data/ext/noderb_extension/libuv/deps/pthread-win32/dll.c +92 -0
  49. data/ext/noderb_extension/libuv/deps/pthread-win32/errno.c +94 -0
  50. data/ext/noderb_extension/libuv/deps/pthread-win32/exit.c +44 -0
  51. data/ext/noderb_extension/libuv/deps/pthread-win32/fork.c +39 -0
  52. data/ext/noderb_extension/libuv/deps/pthread-win32/global.c +107 -0
  53. data/ext/noderb_extension/libuv/deps/pthread-win32/implement.h +944 -0
  54. data/ext/noderb_extension/libuv/deps/pthread-win32/misc.c +50 -0
  55. data/ext/noderb_extension/libuv/deps/pthread-win32/mutex.c +62 -0
  56. data/ext/noderb_extension/libuv/deps/pthread-win32/need_errno.h +145 -0
  57. data/ext/noderb_extension/libuv/deps/pthread-win32/nonportable.c +47 -0
  58. data/ext/noderb_extension/libuv/deps/pthread-win32/private.c +54 -0
  59. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.c +66 -0
  60. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsp +142 -0
  61. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsw +29 -0
  62. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.h +1368 -0
  63. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_destroy.c +79 -0
  64. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getdetachstate.c +86 -0
  65. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getinheritsched.c +51 -0
  66. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedparam.c +52 -0
  67. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedpolicy.c +61 -0
  68. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getscope.c +54 -0
  69. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstackaddr.c +97 -0
  70. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstacksize.c +100 -0
  71. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_init.c +117 -0
  72. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setdetachstate.c +91 -0
  73. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setinheritsched.c +57 -0
  74. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedparam.c +63 -0
  75. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedpolicy.c +55 -0
  76. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setscope.c +62 -0
  77. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstackaddr.c +97 -0
  78. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstacksize.c +110 -0
  79. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_destroy.c +103 -0
  80. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_init.c +69 -0
  81. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_wait.c +104 -0
  82. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_destroy.c +83 -0
  83. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_getpshared.c +95 -0
  84. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_init.c +85 -0
  85. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_setpshared.c +119 -0
  86. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cancel.c +189 -0
  87. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_destroy.c +253 -0
  88. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_init.c +167 -0
  89. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_signal.c +231 -0
  90. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_wait.c +567 -0
  91. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_destroy.c +86 -0
  92. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_getpshared.c +97 -0
  93. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_init.c +87 -0
  94. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_setpshared.c +117 -0
  95. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_delay_np.c +172 -0
  96. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_detach.c +136 -0
  97. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_equal.c +76 -0
  98. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_exit.c +106 -0
  99. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getconcurrency.c +45 -0
  100. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getschedparam.c +75 -0
  101. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getspecific.c +87 -0
  102. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getunique_np.c +47 -0
  103. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getw32threadhandle_np.c +65 -0
  104. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_join.c +157 -0
  105. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_create.c +108 -0
  106. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_delete.c +125 -0
  107. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_kill.c +105 -0
  108. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_consistent.c +187 -0
  109. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_destroy.c +148 -0
  110. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_init.c +130 -0
  111. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_lock.c +269 -0
  112. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_timedlock.c +324 -0
  113. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_trylock.c +154 -0
  114. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_unlock.c +175 -0
  115. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_destroy.c +83 -0
  116. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getkind_np.c +44 -0
  117. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getpshared.c +95 -0
  118. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getrobust.c +113 -0
  119. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_gettype.c +56 -0
  120. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_init.c +86 -0
  121. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setkind_np.c +44 -0
  122. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setpshared.c +119 -0
  123. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setrobust.c +119 -0
  124. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_settype.c +143 -0
  125. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_num_processors_np.c +56 -0
  126. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_once.c +79 -0
  127. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_destroy.c +143 -0
  128. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_init.c +109 -0
  129. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_rdlock.c +102 -0
  130. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedrdlock.c +109 -0
  131. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedwrlock.c +139 -0
  132. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_tryrdlock.c +102 -0
  133. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_trywrlock.c +122 -0
  134. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_unlock.c +93 -0
  135. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_wrlock.c +133 -0
  136. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_destroy.c +84 -0
  137. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_getpshared.c +97 -0
  138. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_init.c +83 -0
  139. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_setpshared.c +120 -0
  140. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_self.c +141 -0
  141. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcancelstate.c +125 -0
  142. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcanceltype.c +126 -0
  143. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setconcurrency.c +53 -0
  144. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setschedparam.c +123 -0
  145. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setspecific.c +167 -0
  146. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_destroy.c +111 -0
  147. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_init.c +123 -0
  148. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_lock.c +80 -0
  149. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_trylock.c +77 -0
  150. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_unlock.c +71 -0
  151. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_testcancel.c +103 -0
  152. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_timechange_handler_np.c +108 -0
  153. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_win32_attach_detach_np.c +258 -0
  154. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_MCS_lock.c +278 -0
  155. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_callUserDestroyRoutines.c +232 -0
  156. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_calloc.c +56 -0
  157. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_cond_check_need_init.c +78 -0
  158. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_getprocessors.c +91 -0
  159. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_is_attr.c +47 -0
  160. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_mutex_check_need_init.c +92 -0
  161. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_new.c +94 -0
  162. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processInitialize.c +92 -0
  163. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processTerminate.c +105 -0
  164. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_relmillisecs.c +132 -0
  165. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_reuse.c +151 -0
  166. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_cancelwrwait.c +50 -0
  167. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_check_need_init.c +77 -0
  168. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_semwait.c +135 -0
  169. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_spinlock_check_need_init.c +78 -0
  170. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadDestroy.c +79 -0
  171. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadStart.c +357 -0
  172. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_throw.c +189 -0
  173. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_timespec.c +83 -0
  174. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocCreate.c +118 -0
  175. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocDestroy.c +114 -0
  176. data/ext/noderb_extension/libuv/deps/pthread-win32/rwlock.c +51 -0
  177. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.c +53 -0
  178. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.h +183 -0
  179. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_max.c +134 -0
  180. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_min.c +135 -0
  181. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_getscheduler.c +71 -0
  182. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_setscheduler.c +83 -0
  183. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_yield.c +71 -0
  184. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_close.c +58 -0
  185. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_destroy.c +144 -0
  186. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_getvalue.c +110 -0
  187. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_init.c +169 -0
  188. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_open.c +58 -0
  189. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post.c +128 -0
  190. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post_multiple.c +142 -0
  191. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_timedwait.c +238 -0
  192. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_trywait.c +117 -0
  193. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_unlink.c +58 -0
  194. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_wait.c +187 -0
  195. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.c +69 -0
  196. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.h +169 -0
  197. data/ext/noderb_extension/libuv/deps/pthread-win32/signal.c +179 -0
  198. data/ext/noderb_extension/libuv/deps/pthread-win32/spin.c +46 -0
  199. data/ext/noderb_extension/libuv/deps/pthread-win32/sync.c +43 -0
  200. data/ext/noderb_extension/libuv/deps/pthread-win32/tsd.c +44 -0
  201. data/ext/noderb_extension/libuv/deps/pthread-win32/version.rc +388 -0
  202. data/ext/noderb_extension/libuv/deps/pthread-win32/w32_CancelableWait.c +161 -0
  203. data/ext/noderb_extension/libuv/doc/desired-api.md +159 -0
  204. data/ext/noderb_extension/libuv/doc/iocp-links.html +574 -0
  205. data/ext/noderb_extension/libuv/include/ares.h +582 -0
  206. data/ext/noderb_extension/libuv/include/ares_version.h +24 -0
  207. data/ext/noderb_extension/libuv/include/eio.h +376 -0
  208. data/ext/noderb_extension/libuv/include/ev.h +835 -0
  209. data/ext/noderb_extension/libuv/include/ngx-queue.h +102 -0
  210. data/ext/noderb_extension/libuv/include/tree.h +762 -0
  211. data/ext/noderb_extension/libuv/include/uv-unix.h +138 -0
  212. data/ext/noderb_extension/libuv/include/uv-win.h +187 -0
  213. data/ext/noderb_extension/libuv/include/uv.h +635 -0
  214. data/ext/noderb_extension/libuv/src/ares/AUTHORS +37 -0
  215. data/ext/noderb_extension/libuv/src/ares/CHANGES +1198 -0
  216. data/ext/noderb_extension/libuv/src/ares/CMakeLists.txt +22 -0
  217. data/ext/noderb_extension/libuv/src/ares/NEWS +21 -0
  218. data/ext/noderb_extension/libuv/src/ares/README +60 -0
  219. data/ext/noderb_extension/libuv/src/ares/README.cares +13 -0
  220. data/ext/noderb_extension/libuv/src/ares/README.msvc +118 -0
  221. data/ext/noderb_extension/libuv/src/ares/README.node +21 -0
  222. data/ext/noderb_extension/libuv/src/ares/RELEASE-NOTES +25 -0
  223. data/ext/noderb_extension/libuv/src/ares/TODO +23 -0
  224. data/ext/noderb_extension/libuv/src/ares/ares__close_sockets.c +66 -0
  225. data/ext/noderb_extension/libuv/src/ares/ares__get_hostent.c +263 -0
  226. data/ext/noderb_extension/libuv/src/ares/ares__read_line.c +71 -0
  227. data/ext/noderb_extension/libuv/src/ares/ares__timeval.c +111 -0
  228. data/ext/noderb_extension/libuv/src/ares/ares_cancel.c +63 -0
  229. data/ext/noderb_extension/libuv/src/ares/ares_data.c +190 -0
  230. data/ext/noderb_extension/libuv/src/ares/ares_data.h +65 -0
  231. data/ext/noderb_extension/libuv/src/ares/ares_destroy.c +105 -0
  232. data/ext/noderb_extension/libuv/src/ares/ares_dns.h +90 -0
  233. data/ext/noderb_extension/libuv/src/ares/ares_expand_name.c +193 -0
  234. data/ext/noderb_extension/libuv/src/ares/ares_expand_string.c +75 -0
  235. data/ext/noderb_extension/libuv/src/ares/ares_fds.c +62 -0
  236. data/ext/noderb_extension/libuv/src/ares/ares_free_hostent.c +39 -0
  237. data/ext/noderb_extension/libuv/src/ares/ares_free_string.c +25 -0
  238. data/ext/noderb_extension/libuv/src/ares/ares_gethostbyaddr.c +292 -0
  239. data/ext/noderb_extension/libuv/src/ares/ares_gethostbyname.c +515 -0
  240. data/ext/noderb_extension/libuv/src/ares/ares_getnameinfo.c +426 -0
  241. data/ext/noderb_extension/libuv/src/ares/ares_getopt.c +122 -0
  242. data/ext/noderb_extension/libuv/src/ares/ares_getopt.h +53 -0
  243. data/ext/noderb_extension/libuv/src/ares/ares_getsock.c +72 -0
  244. data/ext/noderb_extension/libuv/src/ares/ares_init.c +1665 -0
  245. data/ext/noderb_extension/libuv/src/ares/ares_ipv6.h +78 -0
  246. data/ext/noderb_extension/libuv/src/ares/ares_library_init.c +132 -0
  247. data/ext/noderb_extension/libuv/src/ares/ares_library_init.h +39 -0
  248. data/ext/noderb_extension/libuv/src/ares/ares_llist.c +86 -0
  249. data/ext/noderb_extension/libuv/src/ares/ares_llist.h +42 -0
  250. data/ext/noderb_extension/libuv/src/ares/ares_mkquery.c +195 -0
  251. data/ext/noderb_extension/libuv/src/ares/ares_nowarn.c +59 -0
  252. data/ext/noderb_extension/libuv/src/ares/ares_nowarn.h +24 -0
  253. data/ext/noderb_extension/libuv/src/ares/ares_options.c +253 -0
  254. data/ext/noderb_extension/libuv/src/ares/ares_parse_a_reply.c +260 -0
  255. data/ext/noderb_extension/libuv/src/ares/ares_parse_aaaa_reply.c +256 -0
  256. data/ext/noderb_extension/libuv/src/ares/ares_parse_mx_reply.c +170 -0
  257. data/ext/noderb_extension/libuv/src/ares/ares_parse_ns_reply.c +182 -0
  258. data/ext/noderb_extension/libuv/src/ares/ares_parse_ptr_reply.c +208 -0
  259. data/ext/noderb_extension/libuv/src/ares/ares_parse_srv_reply.c +179 -0
  260. data/ext/noderb_extension/libuv/src/ares/ares_parse_txt_reply.c +201 -0
  261. data/ext/noderb_extension/libuv/src/ares/ares_private.h +351 -0
  262. data/ext/noderb_extension/libuv/src/ares/ares_process.c +1296 -0
  263. data/ext/noderb_extension/libuv/src/ares/ares_query.c +183 -0
  264. data/ext/noderb_extension/libuv/src/ares/ares_rules.h +144 -0
  265. data/ext/noderb_extension/libuv/src/ares/ares_search.c +322 -0
  266. data/ext/noderb_extension/libuv/src/ares/ares_send.c +134 -0
  267. data/ext/noderb_extension/libuv/src/ares/ares_setup.h +191 -0
  268. data/ext/noderb_extension/libuv/src/ares/ares_strcasecmp.c +66 -0
  269. data/ext/noderb_extension/libuv/src/ares/ares_strcasecmp.h +30 -0
  270. data/ext/noderb_extension/libuv/src/ares/ares_strdup.c +42 -0
  271. data/ext/noderb_extension/libuv/src/ares/ares_strdup.h +26 -0
  272. data/ext/noderb_extension/libuv/src/ares/ares_strerror.c +56 -0
  273. data/ext/noderb_extension/libuv/src/ares/ares_timeout.c +80 -0
  274. data/ext/noderb_extension/libuv/src/ares/ares_version.c +11 -0
  275. data/ext/noderb_extension/libuv/src/ares/ares_writev.c +79 -0
  276. data/ext/noderb_extension/libuv/src/ares/ares_writev.h +36 -0
  277. data/ext/noderb_extension/libuv/src/ares/bitncmp.c +59 -0
  278. data/ext/noderb_extension/libuv/src/ares/bitncmp.h +26 -0
  279. data/ext/noderb_extension/libuv/src/ares/config_cygwin/ares_config.h +510 -0
  280. data/ext/noderb_extension/libuv/src/ares/config_darwin/ares_config.h +510 -0
  281. data/ext/noderb_extension/libuv/src/ares/config_freebsd/ares_config.h +510 -0
  282. data/ext/noderb_extension/libuv/src/ares/config_linux/ares_config.h +510 -0
  283. data/ext/noderb_extension/libuv/src/ares/config_openbsd/ares_config.h +510 -0
  284. data/ext/noderb_extension/libuv/src/ares/config_sunos/ares_config.h +510 -0
  285. data/ext/noderb_extension/libuv/src/ares/config_win32/ares_config.h +369 -0
  286. data/ext/noderb_extension/libuv/src/ares/get_ver.awk +35 -0
  287. data/ext/noderb_extension/libuv/src/ares/inet_net_pton.c +450 -0
  288. data/ext/noderb_extension/libuv/src/ares/inet_net_pton.h +31 -0
  289. data/ext/noderb_extension/libuv/src/ares/inet_ntop.c +232 -0
  290. data/ext/noderb_extension/libuv/src/ares/inet_ntop.h +27 -0
  291. data/ext/noderb_extension/libuv/src/ares/nameser.h +193 -0
  292. data/ext/noderb_extension/libuv/src/ares/setup_once.h +488 -0
  293. data/ext/noderb_extension/libuv/src/ares/windows_port.c +22 -0
  294. data/ext/noderb_extension/libuv/src/eio/Changes +63 -0
  295. data/ext/noderb_extension/libuv/src/eio/LICENSE +36 -0
  296. data/ext/noderb_extension/libuv/src/eio/Makefile.am +15 -0
  297. data/ext/noderb_extension/libuv/src/eio/aclocal.m4 +8957 -0
  298. data/ext/noderb_extension/libuv/src/eio/autogen.sh +3 -0
  299. data/ext/noderb_extension/libuv/src/eio/config.h.in +86 -0
  300. data/ext/noderb_extension/libuv/src/eio/config_cygwin.h +77 -0
  301. data/ext/noderb_extension/libuv/src/eio/config_darwin.h +137 -0
  302. data/ext/noderb_extension/libuv/src/eio/config_freebsd.h +78 -0
  303. data/ext/noderb_extension/libuv/src/eio/config_linux.h +101 -0
  304. data/ext/noderb_extension/libuv/src/eio/config_sunos.h +81 -0
  305. data/ext/noderb_extension/libuv/src/eio/configure.ac +22 -0
  306. data/ext/noderb_extension/libuv/src/eio/demo.c +194 -0
  307. data/ext/noderb_extension/libuv/src/eio/ecb.h +370 -0
  308. data/ext/noderb_extension/libuv/src/eio/eio.3 +3428 -0
  309. data/ext/noderb_extension/libuv/src/eio/eio.c +2562 -0
  310. data/ext/noderb_extension/libuv/src/eio/eio.pod +969 -0
  311. data/ext/noderb_extension/libuv/src/eio/libeio.m4 +195 -0
  312. data/ext/noderb_extension/libuv/src/eio/xthread.h +164 -0
  313. data/ext/noderb_extension/libuv/src/ev/Changes +388 -0
  314. data/ext/noderb_extension/libuv/src/ev/LICENSE +36 -0
  315. data/ext/noderb_extension/libuv/src/ev/Makefile.am +18 -0
  316. data/ext/noderb_extension/libuv/src/ev/Makefile.in +771 -0
  317. data/ext/noderb_extension/libuv/src/ev/README +58 -0
  318. data/ext/noderb_extension/libuv/src/ev/aclocal.m4 +8957 -0
  319. data/ext/noderb_extension/libuv/src/ev/autogen.sh +6 -0
  320. data/ext/noderb_extension/libuv/src/ev/config.guess +1526 -0
  321. data/ext/noderb_extension/libuv/src/ev/config.h.in +125 -0
  322. data/ext/noderb_extension/libuv/src/ev/config.sub +1658 -0
  323. data/ext/noderb_extension/libuv/src/ev/config_cygwin.h +123 -0
  324. data/ext/noderb_extension/libuv/src/ev/config_darwin.h +122 -0
  325. data/ext/noderb_extension/libuv/src/ev/config_freebsd.h +120 -0
  326. data/ext/noderb_extension/libuv/src/ev/config_linux.h +130 -0
  327. data/ext/noderb_extension/libuv/src/ev/config_sunos.h +122 -0
  328. data/ext/noderb_extension/libuv/src/ev/configure +13037 -0
  329. data/ext/noderb_extension/libuv/src/ev/configure.ac +18 -0
  330. data/ext/noderb_extension/libuv/src/ev/depcomp +630 -0
  331. data/ext/noderb_extension/libuv/src/ev/ev++.h +816 -0
  332. data/ext/noderb_extension/libuv/src/ev/ev.3 +5311 -0
  333. data/ext/noderb_extension/libuv/src/ev/ev.c +3913 -0
  334. data/ext/noderb_extension/libuv/src/ev/ev.pod +5243 -0
  335. data/ext/noderb_extension/libuv/src/ev/ev_epoll.c +266 -0
  336. data/ext/noderb_extension/libuv/src/ev/ev_kqueue.c +198 -0
  337. data/ext/noderb_extension/libuv/src/ev/ev_poll.c +148 -0
  338. data/ext/noderb_extension/libuv/src/ev/ev_port.c +179 -0
  339. data/ext/noderb_extension/libuv/src/ev/ev_select.c +310 -0
  340. data/ext/noderb_extension/libuv/src/ev/ev_vars.h +203 -0
  341. data/ext/noderb_extension/libuv/src/ev/ev_win32.c +153 -0
  342. data/ext/noderb_extension/libuv/src/ev/ev_wrap.h +196 -0
  343. data/ext/noderb_extension/libuv/src/ev/event.c +402 -0
  344. data/ext/noderb_extension/libuv/src/ev/event.h +170 -0
  345. data/ext/noderb_extension/libuv/src/ev/install-sh +294 -0
  346. data/ext/noderb_extension/libuv/src/ev/libev.m4 +39 -0
  347. data/ext/noderb_extension/libuv/src/ev/ltmain.sh +8413 -0
  348. data/ext/noderb_extension/libuv/src/ev/missing +336 -0
  349. data/ext/noderb_extension/libuv/src/ev/mkinstalldirs +111 -0
  350. data/ext/noderb_extension/libuv/src/uv-common.c +172 -0
  351. data/ext/noderb_extension/libuv/src/uv-common.h +53 -0
  352. data/ext/noderb_extension/libuv/src/uv-cygwin.c +52 -0
  353. data/ext/noderb_extension/libuv/src/uv-darwin.c +64 -0
  354. data/ext/noderb_extension/libuv/src/uv-eio.c +113 -0
  355. data/ext/noderb_extension/libuv/src/uv-eio.h +13 -0
  356. data/ext/noderb_extension/libuv/src/uv-freebsd.c +65 -0
  357. data/ext/noderb_extension/libuv/src/uv-linux.c +51 -0
  358. data/ext/noderb_extension/libuv/src/uv-sunos.c +60 -0
  359. data/ext/noderb_extension/libuv/src/uv-unix.c +2408 -0
  360. data/ext/noderb_extension/libuv/src/win/async.c +129 -0
  361. data/ext/noderb_extension/libuv/src/win/cares.c +304 -0
  362. data/ext/noderb_extension/libuv/src/win/core.c +155 -0
  363. data/ext/noderb_extension/libuv/src/win/error.c +140 -0
  364. data/ext/noderb_extension/libuv/src/win/getaddrinfo.c +341 -0
  365. data/ext/noderb_extension/libuv/src/win/handle.c +176 -0
  366. data/ext/noderb_extension/libuv/src/win/internal.h +237 -0
  367. data/ext/noderb_extension/libuv/src/win/loop-watcher.c +128 -0
  368. data/ext/noderb_extension/libuv/src/win/pipe.c +828 -0
  369. data/ext/noderb_extension/libuv/src/win/process.c +936 -0
  370. data/ext/noderb_extension/libuv/src/win/req.c +141 -0
  371. data/ext/noderb_extension/libuv/src/win/stdio.c +75 -0
  372. data/ext/noderb_extension/libuv/src/win/stream.c +149 -0
  373. data/ext/noderb_extension/libuv/src/win/tcp.c +895 -0
  374. data/ext/noderb_extension/libuv/src/win/timer.c +269 -0
  375. data/ext/noderb_extension/libuv/src/win/util.c +82 -0
  376. data/ext/noderb_extension/libuv/test/benchmark-ares.c +117 -0
  377. data/ext/noderb_extension/libuv/test/benchmark-getaddrinfo.c +90 -0
  378. data/ext/noderb_extension/libuv/test/benchmark-list.h +77 -0
  379. data/ext/noderb_extension/libuv/test/benchmark-ping-pongs.c +210 -0
  380. data/ext/noderb_extension/libuv/test/benchmark-pound.c +237 -0
  381. data/ext/noderb_extension/libuv/test/benchmark-pump.c +459 -0
  382. data/ext/noderb_extension/libuv/test/benchmark-sizes.c +39 -0
  383. data/ext/noderb_extension/libuv/test/benchmark-spawn.c +154 -0
  384. data/ext/noderb_extension/libuv/test/dns-server.c +323 -0
  385. data/ext/noderb_extension/libuv/test/echo-server.c +299 -0
  386. data/ext/noderb_extension/libuv/test/run-benchmarks.c +64 -0
  387. data/ext/noderb_extension/libuv/test/run-tests.c +82 -0
  388. data/ext/noderb_extension/libuv/test/runner-unix.c +335 -0
  389. data/ext/noderb_extension/libuv/test/runner-unix.h +36 -0
  390. data/ext/noderb_extension/libuv/test/runner-win.c +343 -0
  391. data/ext/noderb_extension/libuv/test/runner-win.h +42 -0
  392. data/ext/noderb_extension/libuv/test/runner.c +311 -0
  393. data/ext/noderb_extension/libuv/test/runner.h +155 -0
  394. data/ext/noderb_extension/libuv/test/task.h +111 -0
  395. data/ext/noderb_extension/libuv/test/test-async.c +218 -0
  396. data/ext/noderb_extension/libuv/test/test-callback-stack.c +205 -0
  397. data/ext/noderb_extension/libuv/test/test-connection-fail.c +149 -0
  398. data/ext/noderb_extension/libuv/test/test-delayed-accept.c +198 -0
  399. data/ext/noderb_extension/libuv/test/test-fail-always.c +29 -0
  400. data/ext/noderb_extension/libuv/test/test-get-currentexe.c +53 -0
  401. data/ext/noderb_extension/libuv/test/test-getaddrinfo.c +110 -0
  402. data/ext/noderb_extension/libuv/test/test-gethostbyname.c +192 -0
  403. data/ext/noderb_extension/libuv/test/test-getsockname.c +196 -0
  404. data/ext/noderb_extension/libuv/test/test-hrtime.c +51 -0
  405. data/ext/noderb_extension/libuv/test/test-idle.c +83 -0
  406. data/ext/noderb_extension/libuv/test/test-list.h +165 -0
  407. data/ext/noderb_extension/libuv/test/test-loop-handles.c +361 -0
  408. data/ext/noderb_extension/libuv/test/test-pass-always.c +28 -0
  409. data/ext/noderb_extension/libuv/test/test-ping-pong.c +256 -0
  410. data/ext/noderb_extension/libuv/test/test-pipe-bind-error.c +148 -0
  411. data/ext/noderb_extension/libuv/test/test-ref.c +91 -0
  412. data/ext/noderb_extension/libuv/test/test-shutdown-eof.c +183 -0
  413. data/ext/noderb_extension/libuv/test/test-spawn.c +345 -0
  414. data/ext/noderb_extension/libuv/test/test-tcp-bind-error.c +204 -0
  415. data/ext/noderb_extension/libuv/test/test-tcp-bind6-error.c +164 -0
  416. data/ext/noderb_extension/libuv/test/test-tcp-writealot.c +198 -0
  417. data/ext/noderb_extension/libuv/test/test-timer-again.c +141 -0
  418. data/ext/noderb_extension/libuv/test/test-timer.c +134 -0
  419. data/ext/noderb_extension/noderb.c +340 -0
  420. data/ext/noderb_extension/noderb.h +2 -0
  421. data/lib/noderb/connection.rb +21 -0
  422. data/lib/noderb/process.rb +17 -0
  423. data/lib/noderb.rb +25 -0
  424. metadata +470 -0
@@ -0,0 +1,140 @@
1
+ /* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to
5
+ * deal in the Software without restriction, including without limitation the
6
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ * sell copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ * IN THE SOFTWARE.
20
+ */
21
+
22
+ #include <assert.h>
23
+ #include <errno.h>
24
+ #include <malloc.h>
25
+ #include <stdio.h>
26
+ #include <string.h>
27
+
28
+ #include "uv.h"
29
+ #include "../uv-common.h"
30
+ #include "internal.h"
31
+
32
+
33
+ const uv_err_t uv_ok_ = { UV_OK, ERROR_SUCCESS };
34
+
35
+
36
+ /*
37
+ * Display an error message and abort the event loop.
38
+ */
39
+ void uv_fatal_error(const int errorno, const char* syscall) {
40
+ char* buf = NULL;
41
+ const char* errmsg;
42
+
43
+ FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
44
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno,
45
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL);
46
+
47
+ if (buf) {
48
+ errmsg = buf;
49
+ } else {
50
+ errmsg = "Unknown error";
51
+ }
52
+
53
+ /* FormatMessage messages include a newline character already, */
54
+ /* so don't add another. */
55
+ if (syscall) {
56
+ fprintf(stderr, "%s: (%d) %s", syscall, errorno, errmsg);
57
+ } else {
58
+ fprintf(stderr, "(%d) %s", errorno, errmsg);
59
+ }
60
+
61
+ if (buf) {
62
+ LocalFree(buf);
63
+ }
64
+
65
+ *((char*)NULL) = 0xff; /* Force debug break */
66
+ abort();
67
+ }
68
+
69
+
70
+ uv_err_t uv_last_error() {
71
+ return LOOP->last_error;
72
+ }
73
+
74
+
75
+ char* uv_strerror(uv_err_t err) {
76
+ if (LOOP->err_str != NULL) {
77
+ LocalFree(LOOP->err_str);
78
+ }
79
+
80
+ FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
81
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err.sys_errno_,
82
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&LOOP->err_str, 0, NULL);
83
+
84
+ if (LOOP->err_str) {
85
+ return LOOP->err_str;
86
+ } else {
87
+ return "Unknown error";
88
+ }
89
+ }
90
+
91
+
92
+ uv_err_code uv_translate_sys_error(int sys_errno) {
93
+ switch (sys_errno) {
94
+ case ERROR_SUCCESS: return UV_OK;
95
+ case ERROR_NOACCESS: return UV_EACCESS;
96
+ case WSAEACCES: return UV_EACCESS;
97
+ case ERROR_ADDRESS_ALREADY_ASSOCIATED: return UV_EADDRINUSE;
98
+ case WSAEADDRINUSE: return UV_EADDRINUSE;
99
+ case WSAEADDRNOTAVAIL: return UV_EADDRNOTAVAIL;
100
+ case WSAEWOULDBLOCK: return UV_EAGAIN;
101
+ case WSAEALREADY: return UV_EALREADY;
102
+ case ERROR_CONNECTION_REFUSED: return UV_ECONNREFUSED;
103
+ case WSAECONNREFUSED: return UV_ECONNREFUSED;
104
+ case WSAEFAULT: return UV_EFAULT;
105
+ case ERROR_INVALID_DATA: return UV_EINVAL;
106
+ case WSAEINVAL: return UV_EINVAL;
107
+ case ERROR_TOO_MANY_OPEN_FILES: return UV_EMFILE;
108
+ case WSAEMFILE: return UV_EMFILE;
109
+ case ERROR_OUTOFMEMORY: return UV_ENOMEM;
110
+ case ERROR_NOT_SUPPORTED: return UV_ENOTSUP;
111
+ case ERROR_INSUFFICIENT_BUFFER: return UV_EINVAL;
112
+ case ERROR_INVALID_FLAGS: return UV_EBADF;
113
+ case ERROR_INVALID_PARAMETER: return UV_EINVAL;
114
+ case ERROR_NO_UNICODE_TRANSLATION: return UV_ECHARSET;
115
+ case ERROR_BROKEN_PIPE: return UV_EOF;
116
+ case ERROR_PIPE_BUSY: return UV_EBUSY;
117
+ case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT;
118
+ default: return UV_UNKNOWN;
119
+ }
120
+ }
121
+
122
+
123
+ uv_err_t uv_new_sys_error(int sys_errno) {
124
+ uv_err_t e;
125
+ e.code = uv_translate_sys_error(sys_errno);
126
+ e.sys_errno_ = sys_errno;
127
+ return e;
128
+ }
129
+
130
+
131
+ void uv_set_sys_error(int sys_errno) {
132
+ LOOP->last_error.code = uv_translate_sys_error(sys_errno);
133
+ LOOP->last_error.sys_errno_ = sys_errno;
134
+ }
135
+
136
+
137
+ void uv_set_error(uv_err_code code, int sys_errno) {
138
+ LOOP->last_error.code = code;
139
+ LOOP->last_error.sys_errno_ = sys_errno;
140
+ }
@@ -0,0 +1,341 @@
1
+ /* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to
5
+ * deal in the Software without restriction, including without limitation the
6
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ * sell copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ * IN THE SOFTWARE.
20
+ */
21
+
22
+ #include <assert.h>
23
+ #include <malloc.h>
24
+
25
+ #include "uv.h"
26
+ #include "internal.h"
27
+
28
+
29
+ /*
30
+ * MinGW is missing this
31
+ */
32
+ #ifndef _MSC_VER
33
+ typedef struct addrinfoW {
34
+ int ai_flags;
35
+ int ai_family;
36
+ int ai_socktype;
37
+ int ai_protocol;
38
+ size_t ai_addrlen;
39
+ wchar_t* ai_canonname;
40
+ struct sockaddr* ai_addr;
41
+ struct addrinfoW* ai_next;
42
+ } ADDRINFOW, *PADDRINFOW;
43
+
44
+ DECLSPEC_IMPORT int WSAAPI GetAddrInfoW(const wchar_t* node,
45
+ const wchar_t* service,
46
+ const ADDRINFOW* hints,
47
+ PADDRINFOW* result);
48
+
49
+ DECLSPEC_IMPORT void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo);
50
+ #endif
51
+
52
+
53
+ /* adjust size value to be multiple of 4. Use to keep pointer aligned */
54
+ /* Do we need different versions of this for different architectures? */
55
+ #define ALIGNED_SIZE(X) ((((X) + 3) >> 2) << 2)
56
+
57
+
58
+ /*
59
+ * getaddrinfo error code mapping
60
+ * Falls back to uv_translate_sys_error if no match
61
+ */
62
+ static uv_err_code uv_translate_eai_error(int eai_errno) {
63
+ switch (eai_errno) {
64
+ case ERROR_SUCCESS: return UV_OK;
65
+ case EAI_BADFLAGS: return UV_EBADF;
66
+ case EAI_FAIL: return UV_EFAULT;
67
+ case EAI_FAMILY: return UV_EAIFAMNOSUPPORT;
68
+ case EAI_MEMORY: return UV_ENOMEM;
69
+ case EAI_NONAME: return UV_EAINONAME;
70
+ case EAI_AGAIN: return UV_EAGAIN;
71
+ case EAI_SERVICE: return UV_EAISERVICE;
72
+ case EAI_SOCKTYPE: return UV_EAISOCKTYPE;
73
+ default: return uv_translate_sys_error(eai_errno);
74
+ }
75
+ }
76
+
77
+
78
+ /* getaddrinfo worker thread implementation */
79
+ static DWORD WINAPI getaddrinfo_thread_proc(void* parameter) {
80
+ uv_getaddrinfo_t* handle = (uv_getaddrinfo_t*)parameter;
81
+ int ret;
82
+
83
+ assert(handle != NULL);
84
+
85
+ if (handle != NULL) {
86
+ /* call OS function on this thread */
87
+ ret = GetAddrInfoW(handle->node, handle->service, handle->hints, &handle->res);
88
+ handle->retcode = ret;
89
+
90
+ /* post getaddrinfo completed */
91
+ if (!PostQueuedCompletionStatus(LOOP->iocp,
92
+ 0,
93
+ 0,
94
+ &handle->getadddrinfo_req.overlapped)) {
95
+ uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
96
+ }
97
+ }
98
+
99
+ return 0;
100
+ }
101
+
102
+
103
+ /*
104
+ * Called from uv_run when complete. Call user specified callback
105
+ * then free returned addrinfo
106
+ * Returned addrinfo strings are converted from UTF-16 to UTF-8.
107
+ *
108
+ * To minimize allocation we calculate total size required,
109
+ * and copy all structs and referenced strings into the one block.
110
+ * Each size calculation is adjusted to avoid unaligned pointers.
111
+ */
112
+ void uv_process_getaddrinfo_req(uv_getaddrinfo_t* handle, uv_req_t* req) {
113
+ int addrinfo_len = 0;
114
+ int name_len = 0;
115
+ size_t addrinfo_struct_len = ALIGNED_SIZE(sizeof(struct addrinfo));
116
+ struct addrinfoW* addrinfow_ptr;
117
+ struct addrinfo* addrinfo_ptr;
118
+ char* alloc_ptr = NULL;
119
+ char* cur_ptr = NULL;
120
+ uv_err_code uv_ret;
121
+
122
+ /* release input parameter memory */
123
+ if (handle->alloc != NULL) {
124
+ free(handle->alloc);
125
+ handle->alloc = NULL;
126
+ }
127
+
128
+ uv_ret = uv_translate_eai_error(handle->retcode);
129
+ if (handle->retcode == 0) {
130
+ /* convert addrinfoW to addrinfo */
131
+ /* first calculate required length */
132
+ addrinfow_ptr = handle->res;
133
+ while (addrinfow_ptr != NULL) {
134
+ addrinfo_len += addrinfo_struct_len + ALIGNED_SIZE(addrinfow_ptr->ai_addrlen);
135
+ if (addrinfow_ptr->ai_canonname != NULL) {
136
+ name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname, -1, NULL, 0);
137
+ if (name_len == 0) {
138
+ uv_ret = uv_translate_sys_error(GetLastError());
139
+ goto complete;
140
+ }
141
+ addrinfo_len += ALIGNED_SIZE(name_len);
142
+ }
143
+ addrinfow_ptr = addrinfow_ptr->ai_next;
144
+ }
145
+
146
+ /* allocate memory for addrinfo results */
147
+ alloc_ptr = (char*)malloc(addrinfo_len);
148
+
149
+ /* do conversions */
150
+ if (alloc_ptr != NULL) {
151
+ cur_ptr = alloc_ptr;
152
+ addrinfow_ptr = handle->res;
153
+
154
+ while (addrinfow_ptr != NULL) {
155
+ /* copy addrinfo struct data */
156
+ assert(cur_ptr + addrinfo_struct_len <= alloc_ptr + addrinfo_len);
157
+ addrinfo_ptr = (struct addrinfo*)cur_ptr;
158
+ addrinfo_ptr->ai_family = addrinfow_ptr->ai_family;
159
+ addrinfo_ptr->ai_socktype = addrinfow_ptr->ai_socktype;
160
+ addrinfo_ptr->ai_protocol = addrinfow_ptr->ai_protocol;
161
+ addrinfo_ptr->ai_flags = addrinfow_ptr->ai_flags;
162
+ addrinfo_ptr->ai_addrlen = addrinfow_ptr->ai_addrlen;
163
+ addrinfo_ptr->ai_canonname = NULL;
164
+ addrinfo_ptr->ai_addr = NULL;
165
+ addrinfo_ptr->ai_next = NULL;
166
+
167
+ cur_ptr += addrinfo_struct_len;
168
+
169
+ /* copy sockaddr */
170
+ if (addrinfo_ptr->ai_addrlen > 0) {
171
+ assert(cur_ptr + addrinfo_ptr->ai_addrlen <= alloc_ptr + addrinfo_len);
172
+ memcpy(cur_ptr, addrinfow_ptr->ai_addr, addrinfo_ptr->ai_addrlen);
173
+ addrinfo_ptr->ai_addr = (struct sockaddr*)cur_ptr;
174
+ cur_ptr += ALIGNED_SIZE(addrinfo_ptr->ai_addrlen);
175
+ }
176
+
177
+ /* convert canonical name to UTF-8 */
178
+ if (addrinfow_ptr->ai_canonname != NULL) {
179
+ name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname, -1, NULL, 0);
180
+ assert(name_len > 0);
181
+ assert(cur_ptr + name_len <= alloc_ptr + addrinfo_len);
182
+ name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname, -1, cur_ptr, name_len);
183
+ assert(name_len > 0);
184
+ addrinfo_ptr->ai_canonname = cur_ptr;
185
+ cur_ptr += ALIGNED_SIZE(name_len);
186
+ }
187
+ assert(cur_ptr <= alloc_ptr + addrinfo_len);
188
+
189
+ /* set next ptr */
190
+ addrinfow_ptr = addrinfow_ptr->ai_next;
191
+ if (addrinfow_ptr != NULL) {
192
+ addrinfo_ptr->ai_next = (struct addrinfo*)cur_ptr;
193
+ }
194
+ }
195
+ } else {
196
+ uv_ret = UV_ENOMEM;
197
+ }
198
+
199
+ }
200
+
201
+ /* return memory to system */
202
+ if (handle->res != NULL) {
203
+ FreeAddrInfoW(handle->res);
204
+ handle->res = NULL;
205
+ }
206
+
207
+ complete:
208
+ /* finally do callback with converted result */
209
+ handle->getaddrinfo_cb(handle, uv_ret, (struct addrinfo*)alloc_ptr);
210
+
211
+ /* release copied result memory */
212
+ if (alloc_ptr != NULL) {
213
+ free(alloc_ptr);
214
+ }
215
+
216
+ uv_unref();
217
+ }
218
+
219
+
220
+ /*
221
+ * Entry point for getaddrinfo
222
+ * we convert the UTF-8 strings to UNICODE
223
+ * and save the UNICODE string pointers in the handle
224
+ * We also copy hints so that caller does not need to keep memory until the callback.
225
+ * return UV_OK if a callback will be made
226
+ * return error code if validation fails
227
+ *
228
+ * To minimize allocation we calculate total size required,
229
+ * and copy all structs and referenced strings into the one block.
230
+ * Each size calculation is adjusted to avoid unaligned pointers.
231
+ */
232
+ int uv_getaddrinfo(uv_getaddrinfo_t* handle,
233
+ uv_getaddrinfo_cb getaddrinfo_cb,
234
+ const char* node,
235
+ const char* service,
236
+ const struct addrinfo* hints) {
237
+ int nodesize = 0;
238
+ int servicesize = 0;
239
+ int hintssize = 0;
240
+ char* alloc_ptr = NULL;
241
+
242
+ if (handle == NULL || getaddrinfo_cb == NULL ||
243
+ (node == NULL && service == NULL)) {
244
+ uv_set_sys_error(WSAEINVAL);
245
+ goto error;
246
+ }
247
+
248
+ handle->getaddrinfo_cb = getaddrinfo_cb;
249
+ handle->res = NULL;
250
+ handle->type = UV_GETADDRINFO;
251
+
252
+ /* calculate required memory size for all input values */
253
+ if (node != NULL) {
254
+ nodesize = ALIGNED_SIZE(uv_utf8_to_utf16(node, NULL, 0) * sizeof(wchar_t));
255
+ if (nodesize == 0) {
256
+ uv_set_sys_error(GetLastError());
257
+ goto error;
258
+ }
259
+ }
260
+
261
+ if (service != NULL) {
262
+ servicesize = ALIGNED_SIZE(uv_utf8_to_utf16(service, NULL, 0) * sizeof(wchar_t));
263
+ if (servicesize == 0) {
264
+ uv_set_sys_error(GetLastError());
265
+ goto error;
266
+ }
267
+ }
268
+ if (hints != NULL) {
269
+ hintssize = ALIGNED_SIZE(sizeof(struct addrinfoW));
270
+ }
271
+
272
+ /* allocate memory for inputs, and partition it as needed */
273
+ alloc_ptr = (char*)malloc(nodesize + servicesize + hintssize);
274
+ if (!alloc_ptr) {
275
+ uv_set_sys_error(WSAENOBUFS);
276
+ goto error;
277
+ }
278
+
279
+ /* save alloc_ptr now so we can free if error */
280
+ handle->alloc = (void*)alloc_ptr;
281
+
282
+ /* convert node string to UTF16 into allocated memory and save pointer in handle */
283
+ if (node != NULL) {
284
+ handle->node = (wchar_t*)alloc_ptr;
285
+ if (uv_utf8_to_utf16(node, (wchar_t*)alloc_ptr, nodesize / sizeof(wchar_t)) == 0) {
286
+ uv_set_sys_error(GetLastError());
287
+ goto error;
288
+ }
289
+ alloc_ptr += nodesize;
290
+ } else {
291
+ handle->node = NULL;
292
+ }
293
+
294
+ /* convert service string to UTF16 into allocated memory and save pointer in handle */
295
+ if (service != NULL) {
296
+ handle->service = (wchar_t*)alloc_ptr;
297
+ if (uv_utf8_to_utf16(service, (wchar_t*)alloc_ptr, servicesize / sizeof(wchar_t)) == 0) {
298
+ uv_set_sys_error(GetLastError());
299
+ goto error;
300
+ }
301
+ alloc_ptr += servicesize;
302
+ } else {
303
+ handle->service = NULL;
304
+ }
305
+
306
+ /* copy hints to allocated memory and save pointer in handle */
307
+ if (hints != NULL) {
308
+ handle->hints = (struct addrinfoW*)alloc_ptr;
309
+ handle->hints->ai_family = hints->ai_family;
310
+ handle->hints->ai_socktype = hints->ai_socktype;
311
+ handle->hints->ai_protocol = hints->ai_protocol;
312
+ handle->hints->ai_flags = hints->ai_flags;
313
+ handle->hints->ai_addrlen = 0;
314
+ handle->hints->ai_canonname = NULL;
315
+ handle->hints->ai_addr = NULL;
316
+ handle->hints->ai_next = NULL;
317
+ } else {
318
+ handle->hints = NULL;
319
+ }
320
+
321
+ /* init request for Post handling */
322
+ uv_req_init(&handle->getadddrinfo_req);
323
+ handle->getadddrinfo_req.data = handle;
324
+ handle->getadddrinfo_req.type = UV_GETADDRINFO_REQ;
325
+
326
+ /* Ask thread to run. Treat this as a long operation */
327
+ if (QueueUserWorkItem(&getaddrinfo_thread_proc, handle, WT_EXECUTELONGFUNCTION) == 0) {
328
+ uv_set_sys_error(GetLastError());
329
+ goto error;
330
+ }
331
+
332
+ uv_ref();
333
+
334
+ return 0;
335
+
336
+ error:
337
+ if (handle != NULL && handle->alloc != NULL) {
338
+ free(handle->alloc);
339
+ }
340
+ return -1;
341
+ }
@@ -0,0 +1,176 @@
1
+ /* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to
5
+ * deal in the Software without restriction, including without limitation the
6
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ * sell copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ * IN THE SOFTWARE.
20
+ */
21
+
22
+ #include <assert.h>
23
+
24
+ #include "uv.h"
25
+ #include "internal.h"
26
+
27
+
28
+ int uv_is_active(uv_handle_t* handle) {
29
+ switch (handle->type) {
30
+ case UV_TIMER:
31
+ case UV_IDLE:
32
+ case UV_PREPARE:
33
+ case UV_CHECK:
34
+ return (handle->flags & UV_HANDLE_ACTIVE) ? 1 : 0;
35
+
36
+ default:
37
+ return 1;
38
+ }
39
+ }
40
+
41
+
42
+ /* TODO: integrate this with uv_close. */
43
+ static void uv_close_error(uv_handle_t* handle, uv_err_t e) {
44
+ uv_tcp_t* tcp;
45
+ uv_pipe_t* pipe;
46
+ uv_process_t* process;
47
+
48
+ if (handle->flags & UV_HANDLE_CLOSING) {
49
+ return;
50
+ }
51
+
52
+ handle->error = e;
53
+ handle->flags |= UV_HANDLE_CLOSING;
54
+
55
+ /* Handle-specific close actions */
56
+ switch (handle->type) {
57
+ case UV_TCP:
58
+ tcp = (uv_tcp_t*)handle;
59
+ /* If we don't shutdown before calling closesocket, windows will */
60
+ /* silently discard the kernel send buffer and reset the connection. */
61
+ if (!(tcp->flags & UV_HANDLE_SHUT)) {
62
+ shutdown(tcp->socket, SD_SEND);
63
+ tcp->flags |= UV_HANDLE_SHUT;
64
+ }
65
+ tcp->flags &= ~(UV_HANDLE_READING | UV_HANDLE_LISTENING);
66
+ closesocket(tcp->socket);
67
+ if (tcp->reqs_pending == 0) {
68
+ uv_want_endgame(handle);
69
+ }
70
+ return;
71
+
72
+ case UV_NAMED_PIPE:
73
+ pipe = (uv_pipe_t*)handle;
74
+ pipe->flags &= ~(UV_HANDLE_READING | UV_HANDLE_LISTENING);
75
+ close_pipe(pipe, NULL, NULL);
76
+ if (pipe->reqs_pending == 0) {
77
+ uv_want_endgame(handle);
78
+ }
79
+ return;
80
+
81
+ case UV_TIMER:
82
+ uv_timer_stop((uv_timer_t*)handle);
83
+ uv_want_endgame(handle);
84
+ return;
85
+
86
+ case UV_PREPARE:
87
+ uv_prepare_stop((uv_prepare_t*)handle);
88
+ uv_want_endgame(handle);
89
+ return;
90
+
91
+ case UV_CHECK:
92
+ uv_check_stop((uv_check_t*)handle);
93
+ uv_want_endgame(handle);
94
+ return;
95
+
96
+ case UV_IDLE:
97
+ uv_idle_stop((uv_idle_t*)handle);
98
+ uv_want_endgame(handle);
99
+ return;
100
+
101
+ case UV_ASYNC:
102
+ if (!((uv_async_t*)handle)->async_sent) {
103
+ uv_want_endgame(handle);
104
+ }
105
+ return;
106
+
107
+ case UV_PROCESS:
108
+ process = (uv_process_t*)handle;
109
+ uv_process_close(process);
110
+ return;
111
+
112
+ default:
113
+ /* Not supported */
114
+ abort();
115
+ }
116
+ }
117
+
118
+
119
+ void uv_close(uv_handle_t* handle, uv_close_cb close_cb) {
120
+ handle->close_cb = close_cb;
121
+ uv_close_error(handle, uv_ok_);
122
+ }
123
+
124
+
125
+ void uv_want_endgame(uv_handle_t* handle) {
126
+ if (!(handle->flags & UV_HANDLE_ENDGAME_QUEUED)) {
127
+ handle->flags |= UV_HANDLE_ENDGAME_QUEUED;
128
+
129
+ handle->endgame_next = LOOP->endgame_handles;
130
+ LOOP->endgame_handles = handle;
131
+ }
132
+ }
133
+
134
+
135
+ void uv_process_endgames() {
136
+ uv_handle_t* handle;
137
+
138
+ while (LOOP->endgame_handles) {
139
+ handle = LOOP->endgame_handles;
140
+ LOOP->endgame_handles = handle->endgame_next;
141
+
142
+ handle->flags &= ~UV_HANDLE_ENDGAME_QUEUED;
143
+
144
+ switch (handle->type) {
145
+ case UV_TCP:
146
+ uv_tcp_endgame((uv_tcp_t*)handle);
147
+ break;
148
+
149
+ case UV_NAMED_PIPE:
150
+ uv_pipe_endgame((uv_pipe_t*)handle);
151
+ break;
152
+
153
+ case UV_TIMER:
154
+ uv_timer_endgame((uv_timer_t*)handle);
155
+ break;
156
+
157
+ case UV_PREPARE:
158
+ case UV_CHECK:
159
+ case UV_IDLE:
160
+ uv_loop_watcher_endgame(handle);
161
+ break;
162
+
163
+ case UV_ASYNC:
164
+ uv_async_endgame((uv_async_t*)handle);
165
+ break;
166
+
167
+ case UV_PROCESS:
168
+ uv_process_endgame((uv_process_t*)handle);
169
+ break;
170
+
171
+ default:
172
+ assert(0);
173
+ break;
174
+ }
175
+ }
176
+ }