couchbase-memcached 1.2.8

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 (539) hide show
  1. data.tar.gz.sig +2 -0
  2. data/BENCHMARKS +134 -0
  3. data/CHANGELOG +127 -0
  4. data/LICENSE +184 -0
  5. data/Manifest +535 -0
  6. data/README +118 -0
  7. data/Rakefile +83 -0
  8. data/TODO +4 -0
  9. data/couchbase-memcached.gemspec +33 -0
  10. data/ext/extconf-make.rb +25 -0
  11. data/ext/extconf.rb +91 -0
  12. data/ext/libmemcached-0.50/AUTHORS +11 -0
  13. data/ext/libmemcached-0.50/COPYING +33 -0
  14. data/ext/libmemcached-0.50/ChangeLog +392 -0
  15. data/ext/libmemcached-0.50/Makefile.am +114 -0
  16. data/ext/libmemcached-0.50/Makefile.in +4232 -0
  17. data/ext/libmemcached-0.50/NEWS +1 -0
  18. data/ext/libmemcached-0.50/README +43 -0
  19. data/ext/libmemcached-0.50/README.FIRST +31 -0
  20. data/ext/libmemcached-0.50/README.win32 +25 -0
  21. data/ext/libmemcached-0.50/THANKS +14 -0
  22. data/ext/libmemcached-0.50/TODO +11 -0
  23. data/ext/libmemcached-0.50/aclocal.m4 +1077 -0
  24. data/ext/libmemcached-0.50/clients/client_options.h +45 -0
  25. data/ext/libmemcached-0.50/clients/execute.cc +131 -0
  26. data/ext/libmemcached-0.50/clients/execute.h +30 -0
  27. data/ext/libmemcached-0.50/clients/generator.cc +96 -0
  28. data/ext/libmemcached-0.50/clients/generator.h +36 -0
  29. data/ext/libmemcached-0.50/clients/include.am +116 -0
  30. data/ext/libmemcached-0.50/clients/memaslap.c +908 -0
  31. data/ext/libmemcached-0.50/clients/memcapable.cc +2094 -0
  32. data/ext/libmemcached-0.50/clients/memcat.cc +242 -0
  33. data/ext/libmemcached-0.50/clients/memcp.cc +317 -0
  34. data/ext/libmemcached-0.50/clients/memdump.cc +183 -0
  35. data/ext/libmemcached-0.50/clients/memerror.cc +102 -0
  36. data/ext/libmemcached-0.50/clients/memflush.cc +154 -0
  37. data/ext/libmemcached-0.50/clients/memparse.cc +68 -0
  38. data/ext/libmemcached-0.50/clients/memrm.cc +177 -0
  39. data/ext/libmemcached-0.50/clients/memslap.cc +495 -0
  40. data/ext/libmemcached-0.50/clients/memstat.cc +349 -0
  41. data/ext/libmemcached-0.50/clients/ms_atomic.h +69 -0
  42. data/ext/libmemcached-0.50/clients/ms_conn.c +3413 -0
  43. data/ext/libmemcached-0.50/clients/ms_conn.h +241 -0
  44. data/ext/libmemcached-0.50/clients/ms_memslap.h +132 -0
  45. data/ext/libmemcached-0.50/clients/ms_setting.c +1068 -0
  46. data/ext/libmemcached-0.50/clients/ms_setting.h +181 -0
  47. data/ext/libmemcached-0.50/clients/ms_sigsegv.c +126 -0
  48. data/ext/libmemcached-0.50/clients/ms_sigsegv.h +34 -0
  49. data/ext/libmemcached-0.50/clients/ms_stats.c +307 -0
  50. data/ext/libmemcached-0.50/clients/ms_stats.h +69 -0
  51. data/ext/libmemcached-0.50/clients/ms_task.c +1114 -0
  52. data/ext/libmemcached-0.50/clients/ms_task.h +94 -0
  53. data/ext/libmemcached-0.50/clients/ms_thread.c +351 -0
  54. data/ext/libmemcached-0.50/clients/ms_thread.h +78 -0
  55. data/ext/libmemcached-0.50/clients/utilities.cc +231 -0
  56. data/ext/libmemcached-0.50/clients/utilities.h +64 -0
  57. data/ext/libmemcached-0.50/config.h.in +647 -0
  58. data/ext/libmemcached-0.50/config/autorun.sh +126 -0
  59. data/ext/libmemcached-0.50/config/compile +143 -0
  60. data/ext/libmemcached-0.50/config/config.guess +1517 -0
  61. data/ext/libmemcached-0.50/config/config.rpath +666 -0
  62. data/ext/libmemcached-0.50/config/config.sub +1760 -0
  63. data/ext/libmemcached-0.50/config/depcomp +630 -0
  64. data/ext/libmemcached-0.50/config/install-sh +520 -0
  65. data/ext/libmemcached-0.50/config/ltmain.sh +9642 -0
  66. data/ext/libmemcached-0.50/config/missing +376 -0
  67. data/ext/libmemcached-0.50/config/pandora-plugin +752 -0
  68. data/ext/libmemcached-0.50/config/uncrustify.cfg +1112 -0
  69. data/ext/libmemcached-0.50/configure +27103 -0
  70. data/ext/libmemcached-0.50/configure.ac +186 -0
  71. data/ext/libmemcached-0.50/docs/conf.py.in +354 -0
  72. data/ext/libmemcached-0.50/docs/include.am +240 -0
  73. data/ext/libmemcached-0.50/docs/man/hashkit_clone.3 +88 -0
  74. data/ext/libmemcached-0.50/docs/man/hashkit_crc32.3 +105 -0
  75. data/ext/libmemcached-0.50/docs/man/hashkit_create.3 +88 -0
  76. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_32.3 +105 -0
  77. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_64.3 +105 -0
  78. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_32.3 +105 -0
  79. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_64.3 +105 -0
  80. data/ext/libmemcached-0.50/docs/man/hashkit_free.3 +88 -0
  81. data/ext/libmemcached-0.50/docs/man/hashkit_functions.3 +105 -0
  82. data/ext/libmemcached-0.50/docs/man/hashkit_hsieh.3 +105 -0
  83. data/ext/libmemcached-0.50/docs/man/hashkit_is_allocated.3 +88 -0
  84. data/ext/libmemcached-0.50/docs/man/hashkit_jenkins.3 +105 -0
  85. data/ext/libmemcached-0.50/docs/man/hashkit_md5.3 +105 -0
  86. data/ext/libmemcached-0.50/docs/man/hashkit_murmur.3 +105 -0
  87. data/ext/libmemcached-0.50/docs/man/hashkit_value.3 +66 -0
  88. data/ext/libmemcached-0.50/docs/man/libhashkit.3 +57 -0
  89. data/ext/libmemcached-0.50/docs/man/libmemcached.3 +208 -0
  90. data/ext/libmemcached-0.50/docs/man/libmemcached_check_configuration.3 +293 -0
  91. data/ext/libmemcached-0.50/docs/man/libmemcached_configuration.3 +293 -0
  92. data/ext/libmemcached-0.50/docs/man/libmemcached_examples.3 +144 -0
  93. data/ext/libmemcached-0.50/docs/man/libmemcachedutil.3 +68 -0
  94. data/ext/libmemcached-0.50/docs/man/memaslap.1 +1222 -0
  95. data/ext/libmemcached-0.50/docs/man/memcached.3 +293 -0
  96. data/ext/libmemcached-0.50/docs/man/memcached_add.3 +132 -0
  97. data/ext/libmemcached-0.50/docs/man/memcached_add_by_key.3 +132 -0
  98. data/ext/libmemcached-0.50/docs/man/memcached_analyze.3 +77 -0
  99. data/ext/libmemcached-0.50/docs/man/memcached_append.3 +111 -0
  100. data/ext/libmemcached-0.50/docs/man/memcached_append_by_key.3 +111 -0
  101. data/ext/libmemcached-0.50/docs/man/memcached_behavior_get.3 +333 -0
  102. data/ext/libmemcached-0.50/docs/man/memcached_behavior_set.3 +333 -0
  103. data/ext/libmemcached-0.50/docs/man/memcached_callback_get.3 +159 -0
  104. data/ext/libmemcached-0.50/docs/man/memcached_callback_set.3 +159 -0
  105. data/ext/libmemcached-0.50/docs/man/memcached_cas.3 +91 -0
  106. data/ext/libmemcached-0.50/docs/man/memcached_cas_by_key.3 +91 -0
  107. data/ext/libmemcached-0.50/docs/man/memcached_clone.3 +99 -0
  108. data/ext/libmemcached-0.50/docs/man/memcached_create.3 +99 -0
  109. data/ext/libmemcached-0.50/docs/man/memcached_decrement.3 +124 -0
  110. data/ext/libmemcached-0.50/docs/man/memcached_decrement_with_initial.3 +124 -0
  111. data/ext/libmemcached-0.50/docs/man/memcached_delete.3 +83 -0
  112. data/ext/libmemcached-0.50/docs/man/memcached_delete_by_key.3 +83 -0
  113. data/ext/libmemcached-0.50/docs/man/memcached_destroy_sasl_auth_data.3 +95 -0
  114. data/ext/libmemcached-0.50/docs/man/memcached_dump.3 +77 -0
  115. data/ext/libmemcached-0.50/docs/man/memcached_fetch.3 +174 -0
  116. data/ext/libmemcached-0.50/docs/man/memcached_fetch_execute.3 +174 -0
  117. data/ext/libmemcached-0.50/docs/man/memcached_fetch_result.3 +174 -0
  118. data/ext/libmemcached-0.50/docs/man/memcached_flush_buffers.3 +72 -0
  119. data/ext/libmemcached-0.50/docs/man/memcached_free.3 +99 -0
  120. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash.3 +85 -0
  121. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash_value.3 +85 -0
  122. data/ext/libmemcached-0.50/docs/man/memcached_get.3 +174 -0
  123. data/ext/libmemcached-0.50/docs/man/memcached_get_by_key.3 +174 -0
  124. data/ext/libmemcached-0.50/docs/man/memcached_get_memory_allocators.3 +111 -0
  125. data/ext/libmemcached-0.50/docs/man/memcached_get_sasl_callbacks.3 +95 -0
  126. data/ext/libmemcached-0.50/docs/man/memcached_get_user_data.3 +79 -0
  127. data/ext/libmemcached-0.50/docs/man/memcached_increment.3 +124 -0
  128. data/ext/libmemcached-0.50/docs/man/memcached_increment_with_initial.3 +124 -0
  129. data/ext/libmemcached-0.50/docs/man/memcached_lib_version.3 +76 -0
  130. data/ext/libmemcached-0.50/docs/man/memcached_mget.3 +174 -0
  131. data/ext/libmemcached-0.50/docs/man/memcached_mget_by_key.3 +174 -0
  132. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute.3 +174 -0
  133. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute_by_key.3 +174 -0
  134. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_get.3 +139 -0
  135. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_set.3 +139 -0
  136. data/ext/libmemcached-0.50/docs/man/memcached_pool_create.3 +139 -0
  137. data/ext/libmemcached-0.50/docs/man/memcached_pool_destroy.3 +139 -0
  138. data/ext/libmemcached-0.50/docs/man/memcached_pool_pop.3 +139 -0
  139. data/ext/libmemcached-0.50/docs/man/memcached_pool_push.3 +139 -0
  140. data/ext/libmemcached-0.50/docs/man/memcached_pool_st.3 +139 -0
  141. data/ext/libmemcached-0.50/docs/man/memcached_prepend.3 +111 -0
  142. data/ext/libmemcached-0.50/docs/man/memcached_prepend_by_key.3 +111 -0
  143. data/ext/libmemcached-0.50/docs/man/memcached_quit.3 +74 -0
  144. data/ext/libmemcached-0.50/docs/man/memcached_replace.3 +132 -0
  145. data/ext/libmemcached-0.50/docs/man/memcached_replace_by_key.3 +132 -0
  146. data/ext/libmemcached-0.50/docs/man/memcached_sasl_set_auth_data.3 +95 -0
  147. data/ext/libmemcached-0.50/docs/man/memcached_server_add.3 +141 -0
  148. data/ext/libmemcached-0.50/docs/man/memcached_server_count.3 +141 -0
  149. data/ext/libmemcached-0.50/docs/man/memcached_server_cursor.3 +141 -0
  150. data/ext/libmemcached-0.50/docs/man/memcached_server_list.3 +141 -0
  151. data/ext/libmemcached-0.50/docs/man/memcached_server_list_append.3 +111 -0
  152. data/ext/libmemcached-0.50/docs/man/memcached_server_list_count.3 +111 -0
  153. data/ext/libmemcached-0.50/docs/man/memcached_server_list_free.3 +111 -0
  154. data/ext/libmemcached-0.50/docs/man/memcached_server_push.3 +141 -0
  155. data/ext/libmemcached-0.50/docs/man/memcached_servers_parse.3 +111 -0
  156. data/ext/libmemcached-0.50/docs/man/memcached_set.3 +132 -0
  157. data/ext/libmemcached-0.50/docs/man/memcached_set_by_key.3 +132 -0
  158. data/ext/libmemcached-0.50/docs/man/memcached_set_memory_allocators.3 +111 -0
  159. data/ext/libmemcached-0.50/docs/man/memcached_set_sasl_callbacks.3 +95 -0
  160. data/ext/libmemcached-0.50/docs/man/memcached_set_user_data.3 +79 -0
  161. data/ext/libmemcached-0.50/docs/man/memcached_stat.3 +116 -0
  162. data/ext/libmemcached-0.50/docs/man/memcached_stat_execute.3 +116 -0
  163. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_keys.3 +116 -0
  164. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_value.3 +116 -0
  165. data/ext/libmemcached-0.50/docs/man/memcached_stat_servername.3 +116 -0
  166. data/ext/libmemcached-0.50/docs/man/memcached_strerror.3 +69 -0
  167. data/ext/libmemcached-0.50/docs/man/memcached_verbosity.3 +66 -0
  168. data/ext/libmemcached-0.50/docs/man/memcached_version.3 +76 -0
  169. data/ext/libmemcached-0.50/docs/man/memcapable.1 +92 -0
  170. data/ext/libmemcached-0.50/docs/man/memcat.1 +71 -0
  171. data/ext/libmemcached-0.50/docs/man/memcp.1 +77 -0
  172. data/ext/libmemcached-0.50/docs/man/memdump.1 +66 -0
  173. data/ext/libmemcached-0.50/docs/man/memerror.1 +65 -0
  174. data/ext/libmemcached-0.50/docs/man/memflush.1 +73 -0
  175. data/ext/libmemcached-0.50/docs/man/memrm.1 +72 -0
  176. data/ext/libmemcached-0.50/docs/man/memslap.1 +59 -0
  177. data/ext/libmemcached-0.50/docs/man/memstat.1 +70 -0
  178. data/ext/libmemcached-0.50/example/include.am +24 -0
  179. data/ext/libmemcached-0.50/example/interface_v0.c +594 -0
  180. data/ext/libmemcached-0.50/example/interface_v1.c +411 -0
  181. data/ext/libmemcached-0.50/example/memcached_light.c +474 -0
  182. data/ext/libmemcached-0.50/example/memcached_light.h +7 -0
  183. data/ext/libmemcached-0.50/example/storage.c +172 -0
  184. data/ext/libmemcached-0.50/example/storage.h +27 -0
  185. data/ext/libmemcached-0.50/example/storage_innodb.c +535 -0
  186. data/ext/libmemcached-0.50/libhashkit/algorithm.cc +69 -0
  187. data/ext/libmemcached-0.50/libhashkit/algorithm.h +96 -0
  188. data/ext/libmemcached-0.50/libhashkit/behavior.cc +9 -0
  189. data/ext/libmemcached-0.50/libhashkit/behavior.h +26 -0
  190. data/ext/libmemcached-0.50/libhashkit/common.h +33 -0
  191. data/ext/libmemcached-0.50/libhashkit/configure.h.in +19 -0
  192. data/ext/libmemcached-0.50/libhashkit/crc32.cc +86 -0
  193. data/ext/libmemcached-0.50/libhashkit/digest.cc +62 -0
  194. data/ext/libmemcached-0.50/libhashkit/digest.h +30 -0
  195. data/ext/libmemcached-0.50/libhashkit/fnv.cc +75 -0
  196. data/ext/libmemcached-0.50/libhashkit/function.cc +156 -0
  197. data/ext/libmemcached-0.50/libhashkit/function.h +44 -0
  198. data/ext/libmemcached-0.50/libhashkit/hashkit.cc +100 -0
  199. data/ext/libmemcached-0.50/libhashkit/hashkit.h +95 -0
  200. data/ext/libmemcached-0.50/libhashkit/hashkit.hpp +97 -0
  201. data/ext/libmemcached-0.50/libhashkit/hsieh.cc +70 -0
  202. data/ext/libmemcached-0.50/libhashkit/include.am +69 -0
  203. data/ext/libmemcached-0.50/libhashkit/jenkins.cc +214 -0
  204. data/ext/libmemcached-0.50/libhashkit/ketama.cc +164 -0
  205. data/ext/libmemcached-0.50/libhashkit/md5.cc +367 -0
  206. data/ext/libmemcached-0.50/libhashkit/murmur.cc +77 -0
  207. data/ext/libmemcached-0.50/libhashkit/one_at_a_time.cc +34 -0
  208. data/ext/libmemcached-0.50/libhashkit/str_algorithm.cc +58 -0
  209. data/ext/libmemcached-0.50/libhashkit/str_algorithm.h +48 -0
  210. data/ext/libmemcached-0.50/libhashkit/strerror.cc +25 -0
  211. data/ext/libmemcached-0.50/libhashkit/strerror.h +23 -0
  212. data/ext/libmemcached-0.50/libhashkit/types.h +90 -0
  213. data/ext/libmemcached-0.50/libhashkit/visibility.h +48 -0
  214. data/ext/libmemcached-0.50/libmemcached/allocators.cc +119 -0
  215. data/ext/libmemcached-0.50/libmemcached/allocators.h +87 -0
  216. data/ext/libmemcached-0.50/libmemcached/analyze.cc +110 -0
  217. data/ext/libmemcached-0.50/libmemcached/analyze.h +66 -0
  218. data/ext/libmemcached-0.50/libmemcached/array.c +128 -0
  219. data/ext/libmemcached-0.50/libmemcached/array.h +75 -0
  220. data/ext/libmemcached-0.50/libmemcached/auto.cc +383 -0
  221. data/ext/libmemcached-0.50/libmemcached/auto.h +111 -0
  222. data/ext/libmemcached-0.50/libmemcached/basic_string.h +55 -0
  223. data/ext/libmemcached-0.50/libmemcached/behavior.cc +590 -0
  224. data/ext/libmemcached-0.50/libmemcached/behavior.h +86 -0
  225. data/ext/libmemcached-0.50/libmemcached/byteorder.cc +90 -0
  226. data/ext/libmemcached-0.50/libmemcached/byteorder.h +52 -0
  227. data/ext/libmemcached-0.50/libmemcached/callback.cc +160 -0
  228. data/ext/libmemcached-0.50/libmemcached/callback.h +61 -0
  229. data/ext/libmemcached-0.50/libmemcached/common.h +182 -0
  230. data/ext/libmemcached-0.50/libmemcached/configure.h.in +52 -0
  231. data/ext/libmemcached-0.50/libmemcached/connect.cc +626 -0
  232. data/ext/libmemcached-0.50/libmemcached/constants.h +167 -0
  233. data/ext/libmemcached-0.50/libmemcached/delete.cc +266 -0
  234. data/ext/libmemcached-0.50/libmemcached/delete.h +57 -0
  235. data/ext/libmemcached-0.50/libmemcached/do.cc +100 -0
  236. data/ext/libmemcached-0.50/libmemcached/do.hpp +49 -0
  237. data/ext/libmemcached-0.50/libmemcached/dump.cc +107 -0
  238. data/ext/libmemcached-0.50/libmemcached/dump.h +51 -0
  239. data/ext/libmemcached-0.50/libmemcached/error.cc +419 -0
  240. data/ext/libmemcached-0.50/libmemcached/error.h +61 -0
  241. data/ext/libmemcached-0.50/libmemcached/error.hpp +87 -0
  242. data/ext/libmemcached-0.50/libmemcached/exception.hpp +63 -0
  243. data/ext/libmemcached-0.50/libmemcached/fetch.cc +267 -0
  244. data/ext/libmemcached-0.50/libmemcached/fetch.h +53 -0
  245. data/ext/libmemcached-0.50/libmemcached/flush.cc +149 -0
  246. data/ext/libmemcached-0.50/libmemcached/flush.h +49 -0
  247. data/ext/libmemcached-0.50/libmemcached/flush_buffers.cc +66 -0
  248. data/ext/libmemcached-0.50/libmemcached/flush_buffers.h +49 -0
  249. data/ext/libmemcached-0.50/libmemcached/get.cc +842 -0
  250. data/ext/libmemcached-0.50/libmemcached/get.h +135 -0
  251. data/ext/libmemcached-0.50/libmemcached/hash.cc +178 -0
  252. data/ext/libmemcached-0.50/libmemcached/hash.h +68 -0
  253. data/ext/libmemcached-0.50/libmemcached/hosts.cc +516 -0
  254. data/ext/libmemcached-0.50/libmemcached/include.am +183 -0
  255. data/ext/libmemcached-0.50/libmemcached/initialize_query.cc +70 -0
  256. data/ext/libmemcached-0.50/libmemcached/initialize_query.h +51 -0
  257. data/ext/libmemcached-0.50/libmemcached/internal.h +46 -0
  258. data/ext/libmemcached-0.50/libmemcached/io.cc +920 -0
  259. data/ext/libmemcached-0.50/libmemcached/io.h +119 -0
  260. data/ext/libmemcached-0.50/libmemcached/is.h +48 -0
  261. data/ext/libmemcached-0.50/libmemcached/key.cc +23 -0
  262. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.d +30 -0
  263. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.h +118 -0
  264. data/ext/libmemcached-0.50/libmemcached/memcached.cc +437 -0
  265. data/ext/libmemcached-0.50/libmemcached/memcached.h +214 -0
  266. data/ext/libmemcached-0.50/libmemcached/memcached.hpp +799 -0
  267. data/ext/libmemcached-0.50/libmemcached/memcached/README.txt +7 -0
  268. data/ext/libmemcached-0.50/libmemcached/memcached/protocol_binary.h +726 -0
  269. data/ext/libmemcached-0.50/libmemcached/memcached/vbucket.h +26 -0
  270. data/ext/libmemcached-0.50/libmemcached/memcached_util.h +44 -0
  271. data/ext/libmemcached-0.50/libmemcached/memory.h +79 -0
  272. data/ext/libmemcached-0.50/libmemcached/options.cc +178 -0
  273. data/ext/libmemcached-0.50/libmemcached/options.h +49 -0
  274. data/ext/libmemcached-0.50/libmemcached/options.hpp +56 -0
  275. data/ext/libmemcached-0.50/libmemcached/options/context.h +151 -0
  276. data/ext/libmemcached-0.50/libmemcached/options/include.am +19 -0
  277. data/ext/libmemcached-0.50/libmemcached/options/parser.am +0 -0
  278. data/ext/libmemcached-0.50/libmemcached/options/parser.cc +2324 -0
  279. data/ext/libmemcached-0.50/libmemcached/options/parser.h +122 -0
  280. data/ext/libmemcached-0.50/libmemcached/options/scanner.cc +3203 -0
  281. data/ext/libmemcached-0.50/libmemcached/options/scanner.h +479 -0
  282. data/ext/libmemcached-0.50/libmemcached/options/server.h +60 -0
  283. data/ext/libmemcached-0.50/libmemcached/options/symbol.h +57 -0
  284. data/ext/libmemcached-0.50/libmemcached/parse.cc +110 -0
  285. data/ext/libmemcached-0.50/libmemcached/parse.h +23 -0
  286. data/ext/libmemcached-0.50/libmemcached/platform.h +56 -0
  287. data/ext/libmemcached-0.50/libmemcached/prefix_key.cc +65 -0
  288. data/ext/libmemcached-0.50/libmemcached/prefix_key.h +49 -0
  289. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.c +963 -0
  290. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.h +40 -0
  291. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.c +1121 -0
  292. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.h +47 -0
  293. data/ext/libmemcached-0.50/libmemcached/protocol/cache.c +149 -0
  294. data/ext/libmemcached-0.50/libmemcached/protocol/cache.h +116 -0
  295. data/ext/libmemcached-0.50/libmemcached/protocol/callback.h +418 -0
  296. data/ext/libmemcached-0.50/libmemcached/protocol/common.h +163 -0
  297. data/ext/libmemcached-0.50/libmemcached/protocol/include.am +26 -0
  298. data/ext/libmemcached-0.50/libmemcached/protocol/pedantic.c +202 -0
  299. data/ext/libmemcached-0.50/libmemcached/protocol/protocol_handler.c +365 -0
  300. data/ext/libmemcached-0.50/libmemcached/protocol_handler.h +215 -0
  301. data/ext/libmemcached-0.50/libmemcached/purge.cc +90 -0
  302. data/ext/libmemcached-0.50/libmemcached/quit.cc +139 -0
  303. data/ext/libmemcached-0.50/libmemcached/quit.h +55 -0
  304. data/ext/libmemcached-0.50/libmemcached/response.cc +619 -0
  305. data/ext/libmemcached-0.50/libmemcached/response.h +57 -0
  306. data/ext/libmemcached-0.50/libmemcached/result.cc +173 -0
  307. data/ext/libmemcached-0.50/libmemcached/result.h +100 -0
  308. data/ext/libmemcached-0.50/libmemcached/return.h +98 -0
  309. data/ext/libmemcached-0.50/libmemcached/sasl.c +408 -0
  310. data/ext/libmemcached-0.50/libmemcached/sasl.h +86 -0
  311. data/ext/libmemcached-0.50/libmemcached/server.cc +351 -0
  312. data/ext/libmemcached-0.50/libmemcached/server.h +169 -0
  313. data/ext/libmemcached-0.50/libmemcached/server_list.cc +88 -0
  314. data/ext/libmemcached-0.50/libmemcached/server_list.h +77 -0
  315. data/ext/libmemcached-0.50/libmemcached/stats.cc +623 -0
  316. data/ext/libmemcached-0.50/libmemcached/stats.h +96 -0
  317. data/ext/libmemcached-0.50/libmemcached/storage.cc +567 -0
  318. data/ext/libmemcached-0.50/libmemcached/storage.h +133 -0
  319. data/ext/libmemcached-0.50/libmemcached/strerror.cc +189 -0
  320. data/ext/libmemcached-0.50/libmemcached/strerror.h +50 -0
  321. data/ext/libmemcached-0.50/libmemcached/string.cc +253 -0
  322. data/ext/libmemcached-0.50/libmemcached/string.h +121 -0
  323. data/ext/libmemcached-0.50/libmemcached/touch.cc +106 -0
  324. data/ext/libmemcached-0.50/libmemcached/touch.h +59 -0
  325. data/ext/libmemcached-0.50/libmemcached/types.h +117 -0
  326. data/ext/libmemcached-0.50/libmemcached/util.h +40 -0
  327. data/ext/libmemcached-0.50/libmemcached/util/flush.cc +61 -0
  328. data/ext/libmemcached-0.50/libmemcached/util/flush.h +50 -0
  329. data/ext/libmemcached-0.50/libmemcached/util/include.am +34 -0
  330. data/ext/libmemcached-0.50/libmemcached/util/ping.cc +62 -0
  331. data/ext/libmemcached-0.50/libmemcached/util/ping.h +49 -0
  332. data/ext/libmemcached-0.50/libmemcached/util/pool.cc +392 -0
  333. data/ext/libmemcached-0.50/libmemcached/util/pool.h +78 -0
  334. data/ext/libmemcached-0.50/libmemcached/util/version.cc +87 -0
  335. data/ext/libmemcached-0.50/libmemcached/util/version.h +53 -0
  336. data/ext/libmemcached-0.50/libmemcached/verbosity.cc +97 -0
  337. data/ext/libmemcached-0.50/libmemcached/verbosity.h +50 -0
  338. data/ext/libmemcached-0.50/libmemcached/version.cc +214 -0
  339. data/ext/libmemcached-0.50/libmemcached/version.h +52 -0
  340. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.c +118 -0
  341. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.h +59 -0
  342. data/ext/libmemcached-0.50/libmemcached/visibility.h +51 -0
  343. data/ext/libmemcached-0.50/libmemcached/watchpoint.h +110 -0
  344. data/ext/libmemcached-0.50/libtest/callbacks.h +21 -0
  345. data/ext/libmemcached-0.50/libtest/collection.h +19 -0
  346. data/ext/libmemcached-0.50/libtest/common.h +50 -0
  347. data/ext/libmemcached-0.50/libtest/core.h +11 -0
  348. data/ext/libmemcached-0.50/libtest/error.h +18 -0
  349. data/ext/libmemcached-0.50/libtest/failed.h +52 -0
  350. data/ext/libmemcached-0.50/libtest/framework.cc +57 -0
  351. data/ext/libmemcached-0.50/libtest/framework.h +137 -0
  352. data/ext/libmemcached-0.50/libtest/get.h +22 -0
  353. data/ext/libmemcached-0.50/libtest/include.am +52 -0
  354. data/ext/libmemcached-0.50/libtest/runner.h +19 -0
  355. data/ext/libmemcached-0.50/libtest/server.c +355 -0
  356. data/ext/libmemcached-0.50/libtest/server.h +43 -0
  357. data/ext/libmemcached-0.50/libtest/stats.h +30 -0
  358. data/ext/libmemcached-0.50/libtest/strerror.h +14 -0
  359. data/ext/libmemcached-0.50/libtest/test.cc +319 -0
  360. data/ext/libmemcached-0.50/libtest/test.h +162 -0
  361. data/ext/libmemcached-0.50/libtest/test.hpp +46 -0
  362. data/ext/libmemcached-0.50/libtest/visibility.h +69 -0
  363. data/ext/libmemcached-0.50/m4/ac_cxx_header_stdcxx_98.m4 +83 -0
  364. data/ext/libmemcached-0.50/m4/acx_pthread.m4 +271 -0
  365. data/ext/libmemcached-0.50/m4/byteorder.m4 +19 -0
  366. data/ext/libmemcached-0.50/m4/deprecated.m4 +17 -0
  367. data/ext/libmemcached-0.50/m4/eagain.m4 +28 -0
  368. data/ext/libmemcached-0.50/m4/enable_utillib.m4 +16 -0
  369. data/ext/libmemcached-0.50/m4/gettext.m4 +379 -0
  370. data/ext/libmemcached-0.50/m4/hsieh.m4 +18 -0
  371. data/ext/libmemcached-0.50/m4/iconv.m4 +214 -0
  372. data/ext/libmemcached-0.50/m4/lib-ld.m4 +110 -0
  373. data/ext/libmemcached-0.50/m4/lib-link.m4 +767 -0
  374. data/ext/libmemcached-0.50/m4/lib-prefix.m4 +221 -0
  375. data/ext/libmemcached-0.50/m4/libtool.m4 +7851 -0
  376. data/ext/libmemcached-0.50/m4/ltoptions.m4 +369 -0
  377. data/ext/libmemcached-0.50/m4/ltsugar.m4 +123 -0
  378. data/ext/libmemcached-0.50/m4/ltversion.m4 +23 -0
  379. data/ext/libmemcached-0.50/m4/lt~obsolete.m4 +98 -0
  380. data/ext/libmemcached-0.50/m4/memaslap.m4 +9 -0
  381. data/ext/libmemcached-0.50/m4/memcached.m4 +31 -0
  382. data/ext/libmemcached-0.50/m4/murmur.m4 +18 -0
  383. data/ext/libmemcached-0.50/m4/pandora_64bit.m4 +60 -0
  384. data/ext/libmemcached-0.50/m4/pandora_bison.m4 +33 -0
  385. data/ext/libmemcached-0.50/m4/pandora_canonical.m4 +418 -0
  386. data/ext/libmemcached-0.50/m4/pandora_check_compiler_version.m4 +37 -0
  387. data/ext/libmemcached-0.50/m4/pandora_check_cxx_standard.m4 +23 -0
  388. data/ext/libmemcached-0.50/m4/pandora_cinttypes.m4 +39 -0
  389. data/ext/libmemcached-0.50/m4/pandora_clock_gettime.m4 +15 -0
  390. data/ext/libmemcached-0.50/m4/pandora_compile_stdcxx_0x.m4 +103 -0
  391. data/ext/libmemcached-0.50/m4/pandora_cstdint.m4 +38 -0
  392. data/ext/libmemcached-0.50/m4/pandora_cxx_demangle.m4 +27 -0
  393. data/ext/libmemcached-0.50/m4/pandora_enable_dtrace.m4 +60 -0
  394. data/ext/libmemcached-0.50/m4/pandora_ensure_gcc_version.m4 +62 -0
  395. data/ext/libmemcached-0.50/m4/pandora_extensions.m4 +16 -0
  396. data/ext/libmemcached-0.50/m4/pandora_fdatasync.m4 +25 -0
  397. data/ext/libmemcached-0.50/m4/pandora_flex.m4 +33 -0
  398. data/ext/libmemcached-0.50/m4/pandora_have_better_malloc.m4 +66 -0
  399. data/ext/libmemcached-0.50/m4/pandora_have_boost.m4 +93 -0
  400. data/ext/libmemcached-0.50/m4/pandora_have_gcc_atomics.m4 +37 -0
  401. data/ext/libmemcached-0.50/m4/pandora_have_innodb.m4 +41 -0
  402. data/ext/libmemcached-0.50/m4/pandora_have_libaio.m4 +56 -0
  403. data/ext/libmemcached-0.50/m4/pandora_have_libavahi.m4 +41 -0
  404. data/ext/libmemcached-0.50/m4/pandora_have_libbdb.m4 +40 -0
  405. data/ext/libmemcached-0.50/m4/pandora_have_libboost_date_time.m4 +46 -0
  406. data/ext/libmemcached-0.50/m4/pandora_have_libboost_filesystem.m4 +47 -0
  407. data/ext/libmemcached-0.50/m4/pandora_have_libboost_iostreams.m4 +49 -0
  408. data/ext/libmemcached-0.50/m4/pandora_have_libboost_options.m4 +47 -0
  409. data/ext/libmemcached-0.50/m4/pandora_have_libboost_regex.m4 +54 -0
  410. data/ext/libmemcached-0.50/m4/pandora_have_libboost_test.m4 +45 -0
  411. data/ext/libmemcached-0.50/m4/pandora_have_libboost_thread.m4 +54 -0
  412. data/ext/libmemcached-0.50/m4/pandora_have_libcassandra.m4 +44 -0
  413. data/ext/libmemcached-0.50/m4/pandora_have_libcurl.m4 +62 -0
  414. data/ext/libmemcached-0.50/m4/pandora_have_libdl.m4 +51 -0
  415. data/ext/libmemcached-0.50/m4/pandora_have_libdrizzle.m4 +61 -0
  416. data/ext/libmemcached-0.50/m4/pandora_have_libevent.m4 +66 -0
  417. data/ext/libmemcached-0.50/m4/pandora_have_libgearman.m4 +41 -0
  418. data/ext/libmemcached-0.50/m4/pandora_have_libgtest.m4 +47 -0
  419. data/ext/libmemcached-0.50/m4/pandora_have_libhaildb.m4 +43 -0
  420. data/ext/libmemcached-0.50/m4/pandora_have_libhashkit.m4 +42 -0
  421. data/ext/libmemcached-0.50/m4/pandora_have_libinnodb.m4 +64 -0
  422. data/ext/libmemcached-0.50/m4/pandora_have_libldap.m4 +73 -0
  423. data/ext/libmemcached-0.50/m4/pandora_have_libmemcached.m4 +106 -0
  424. data/ext/libmemcached-0.50/m4/pandora_have_libmysqlclient.m4 +146 -0
  425. data/ext/libmemcached-0.50/m4/pandora_have_libndbclient.m4 +80 -0
  426. data/ext/libmemcached-0.50/m4/pandora_have_libpcre.m4 +73 -0
  427. data/ext/libmemcached-0.50/m4/pandora_have_libpq.m4 +46 -0
  428. data/ext/libmemcached-0.50/m4/pandora_have_libpqxx.m4 +44 -0
  429. data/ext/libmemcached-0.50/m4/pandora_have_libsqlite3.m4 +42 -0
  430. data/ext/libmemcached-0.50/m4/pandora_have_libtokyocabinet.m4 +54 -0
  431. data/ext/libmemcached-0.50/m4/pandora_have_libuuid.m4 +55 -0
  432. data/ext/libmemcached-0.50/m4/pandora_have_libvbucket.m4 +40 -0
  433. data/ext/libmemcached-0.50/m4/pandora_have_libxml2.m4 +52 -0
  434. data/ext/libmemcached-0.50/m4/pandora_have_libz.m4 +51 -0
  435. data/ext/libmemcached-0.50/m4/pandora_have_protobuf.m4 +82 -0
  436. data/ext/libmemcached-0.50/m4/pandora_have_sasl.m4 +133 -0
  437. data/ext/libmemcached-0.50/m4/pandora_have_thrift.m4 +45 -0
  438. data/ext/libmemcached-0.50/m4/pandora_header_assert.m4 +23 -0
  439. data/ext/libmemcached-0.50/m4/pandora_header_stdcxx_98.m4 +83 -0
  440. data/ext/libmemcached-0.50/m4/pandora_intltool.m4 +225 -0
  441. data/ext/libmemcached-0.50/m4/pandora_libtool.m4 +25 -0
  442. data/ext/libmemcached-0.50/m4/pandora_optimize.m4 +75 -0
  443. data/ext/libmemcached-0.50/m4/pandora_platform.m4 +117 -0
  444. data/ext/libmemcached-0.50/m4/pandora_plugins.m4 +62 -0
  445. data/ext/libmemcached-0.50/m4/pandora_print_callstack.m4 +61 -0
  446. data/ext/libmemcached-0.50/m4/pandora_pthread.m4 +258 -0
  447. data/ext/libmemcached-0.50/m4/pandora_python3_devel.m4 +236 -0
  448. data/ext/libmemcached-0.50/m4/pandora_run_cpplint.m4 +8 -0
  449. data/ext/libmemcached-0.50/m4/pandora_sasl.m4 +133 -0
  450. data/ext/libmemcached-0.50/m4/pandora_shared_ptr.m4 +59 -0
  451. data/ext/libmemcached-0.50/m4/pandora_stack_direction.m4 +39 -0
  452. data/ext/libmemcached-0.50/m4/pandora_stl_hash.m4 +94 -0
  453. data/ext/libmemcached-0.50/m4/pandora_swig.m4 +39 -0
  454. data/ext/libmemcached-0.50/m4/pandora_use_pipe.m4 +36 -0
  455. data/ext/libmemcached-0.50/m4/pandora_vc_build.m4 +168 -0
  456. data/ext/libmemcached-0.50/m4/pandora_version.m4 +11 -0
  457. data/ext/libmemcached-0.50/m4/pandora_visibility.m4 +75 -0
  458. data/ext/libmemcached-0.50/m4/pandora_warnings.m4 +447 -0
  459. data/ext/libmemcached-0.50/m4/pandora_with_gettext.m4 +44 -0
  460. data/ext/libmemcached-0.50/m4/pandora_with_lua.m4 +55 -0
  461. data/ext/libmemcached-0.50/m4/pandora_with_memcached.m4 +41 -0
  462. data/ext/libmemcached-0.50/m4/pandora_with_perl.m4 +81 -0
  463. data/ext/libmemcached-0.50/m4/pandora_with_php.m4 +56 -0
  464. data/ext/libmemcached-0.50/m4/pandora_with_python.m4 +37 -0
  465. data/ext/libmemcached-0.50/m4/pandora_with_python3.m4 +44 -0
  466. data/ext/libmemcached-0.50/m4/pandora_with_r.m4 +33 -0
  467. data/ext/libmemcached-0.50/m4/pandora_with_ruby.m4 +79 -0
  468. data/ext/libmemcached-0.50/m4/pandora_with_valgrind.m4 +17 -0
  469. data/ext/libmemcached-0.50/m4/pkg.m4 +157 -0
  470. data/ext/libmemcached-0.50/m4/po.m4 +449 -0
  471. data/ext/libmemcached-0.50/m4/progtest.m4 +92 -0
  472. data/ext/libmemcached-0.50/m4/protocol_binary.m4 +36 -0
  473. data/ext/libmemcached-0.50/m4/setsockopt.m4 +73 -0
  474. data/ext/libmemcached-0.50/m4/socket_send_flags.m4 +66 -0
  475. data/ext/libmemcached-0.50/poll/include.am +8 -0
  476. data/ext/libmemcached-0.50/poll/poll.c +77 -0
  477. data/ext/libmemcached-0.50/poll/poll.h +45 -0
  478. data/ext/libmemcached-0.50/support/include.am +11 -0
  479. data/ext/libmemcached-0.50/support/libmemcached-fc.spec.in +105 -0
  480. data/ext/libmemcached-0.50/support/libmemcached.pc.in +10 -0
  481. data/ext/libmemcached-0.50/support/libmemcached.spec.in +281 -0
  482. data/ext/libmemcached-0.50/support/set_benchmark.sh +5 -0
  483. data/ext/libmemcached-0.50/tests/atomsmasher.cc +295 -0
  484. data/ext/libmemcached-0.50/tests/basic.cc +134 -0
  485. data/ext/libmemcached-0.50/tests/basic.h +66 -0
  486. data/ext/libmemcached-0.50/tests/cpp_example.cc +195 -0
  487. data/ext/libmemcached-0.50/tests/deprecated.cc +72 -0
  488. data/ext/libmemcached-0.50/tests/deprecated.h +49 -0
  489. data/ext/libmemcached-0.50/tests/error_conditions.cc +63 -0
  490. data/ext/libmemcached-0.50/tests/error_conditions.h +48 -0
  491. data/ext/libmemcached-0.50/tests/hash_plus.cc +225 -0
  492. data/ext/libmemcached-0.50/tests/hash_results.h +127 -0
  493. data/ext/libmemcached-0.50/tests/hashkit_functions.cc +619 -0
  494. data/ext/libmemcached-0.50/tests/include.am +342 -0
  495. data/ext/libmemcached-0.50/tests/ketama_test_cases.h +121 -0
  496. data/ext/libmemcached-0.50/tests/ketama_test_cases_spy.h +118 -0
  497. data/ext/libmemcached-0.50/tests/libmemcached_world.h +205 -0
  498. data/ext/libmemcached-0.50/tests/mem_functions.cc +6648 -0
  499. data/ext/libmemcached-0.50/tests/mem_udp.cc +510 -0
  500. data/ext/libmemcached-0.50/tests/output_plus.res +5 -0
  501. data/ext/libmemcached-0.50/tests/parser.cc +599 -0
  502. data/ext/libmemcached-0.50/tests/parser.h +109 -0
  503. data/ext/libmemcached-0.50/tests/plus.cpp +240 -0
  504. data/ext/libmemcached-0.50/tests/pool.cc +78 -0
  505. data/ext/libmemcached-0.50/tests/pool.h +49 -0
  506. data/ext/libmemcached-0.50/tests/print.cc +58 -0
  507. data/ext/libmemcached-0.50/tests/print.h +51 -0
  508. data/ext/libmemcached-0.50/tests/replication.cc +333 -0
  509. data/ext/libmemcached-0.50/tests/replication.h +64 -0
  510. data/ext/libmemcached-0.50/tests/start.cc +29 -0
  511. data/ext/libmemcached-0.50/tests/string.cc +174 -0
  512. data/ext/libmemcached-0.50/tests/string.h +67 -0
  513. data/ext/libmemcached-0.50/tests/virtual_buckets.cc +143 -0
  514. data/ext/libmemcached-0.50/tests/virtual_buckets.h +51 -0
  515. data/ext/libmemcached-0.50/win32/include.am +11 -0
  516. data/ext/libmemcached-0.50/win32/wrappers.h +55 -0
  517. data/ext/rlibmemcached.i +263 -0
  518. data/ext/rlibmemcached_wrap.c +16732 -0
  519. data/lib/memcached.rb +32 -0
  520. data/lib/memcached/auth.rb +16 -0
  521. data/lib/memcached/behaviors.rb +77 -0
  522. data/lib/memcached/exceptions.rb +84 -0
  523. data/lib/memcached/experimental.rb +48 -0
  524. data/lib/memcached/memcached.rb +660 -0
  525. data/lib/memcached/rails.rb +133 -0
  526. data/test/profile/benchmark.rb +245 -0
  527. data/test/profile/c_profiler.rb +14 -0
  528. data/test/profile/exercise.rb +185 -0
  529. data/test/profile/rb_profiler.rb +21 -0
  530. data/test/profile/valgrind.rb +10 -0
  531. data/test/setup.rb +30 -0
  532. data/test/teardown.rb +0 -0
  533. data/test/test_helper.rb +19 -0
  534. data/test/unit/binding_test.rb +8 -0
  535. data/test/unit/memcached_experimental_test.rb +274 -0
  536. data/test/unit/memcached_test.rb +1293 -0
  537. data/test/unit/rails_test.rb +122 -0
  538. metadata +650 -0
  539. metadata.gz.sig +0 -0
@@ -0,0 +1,47 @@
1
+ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
+ *
3
+ * Libmemcached library
4
+ *
5
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are
9
+ * met:
10
+ *
11
+ * * Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ *
14
+ * * Redistributions in binary form must reproduce the above
15
+ * copyright notice, this list of conditions and the following disclaimer
16
+ * in the documentation and/or other materials provided with the
17
+ * distribution.
18
+ *
19
+ * * The names of its contributors may not be used to endorse or
20
+ * promote products derived from this software without specific prior
21
+ * written permission.
22
+ *
23
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ *
35
+ */
36
+
37
+ #pragma once
38
+
39
+ LIBMEMCACHED_LOCAL
40
+ bool memcached_binary_protocol_pedantic_check_request(const protocol_binary_request_header *request);
41
+
42
+ LIBMEMCACHED_LOCAL
43
+ bool memcached_binary_protocol_pedantic_check_response(const protocol_binary_request_header *request,
44
+ const protocol_binary_response_header *response);
45
+
46
+ LIBMEMCACHED_LOCAL
47
+ memcached_protocol_event_t memcached_binary_protocol_process_data(memcached_protocol_client_st *client, ssize_t *length, void **endptr);
@@ -0,0 +1,149 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ #include <stdlib.h>
3
+ #include <string.h>
4
+ #include <inttypes.h>
5
+
6
+ #ifndef NDEBUG
7
+ #include <signal.h>
8
+ #endif
9
+
10
+ #include "cache.h"
11
+
12
+ #ifndef NDEBUG
13
+ const uint64_t redzone_pattern = 0xdeadbeefcafebabe;
14
+ int cache_error = 0;
15
+ #endif
16
+
17
+ const size_t initial_pool_size = 64;
18
+
19
+ cache_t* cache_create(const char *name, size_t bufsize, size_t align,
20
+ cache_constructor_t* constructor,
21
+ cache_destructor_t* destructor) {
22
+ cache_t* ret = calloc(1, sizeof(cache_t));
23
+ char* nm = strdup(name);
24
+ void** ptr = calloc(initial_pool_size, bufsize);
25
+ if (ret == NULL || nm == NULL || ptr == NULL ||
26
+ pthread_mutex_init(&ret->mutex, NULL) == -1) {
27
+ free(ret);
28
+ free(nm);
29
+ free(ptr);
30
+ return NULL;
31
+ }
32
+
33
+ ret->name = nm;
34
+ ret->ptr = ptr;
35
+ ret->freetotal = initial_pool_size;
36
+ ret->constructor = constructor;
37
+ ret->destructor = destructor;
38
+
39
+ #ifndef NDEBUG
40
+ ret->bufsize = bufsize + 2 * sizeof(redzone_pattern);
41
+ #else
42
+ ret->bufsize = bufsize;
43
+ #endif
44
+
45
+ (void)align;
46
+
47
+ return ret;
48
+ }
49
+
50
+ static inline void* get_object(void *ptr) {
51
+ #ifndef NDEBUG
52
+ uint64_t *pre = ptr;
53
+ return pre + 1;
54
+ #else
55
+ return ptr;
56
+ #endif
57
+ }
58
+
59
+ void cache_destroy(cache_t *cache) {
60
+ while (cache->freecurr > 0) {
61
+ void *ptr = cache->ptr[--cache->freecurr];
62
+ if (cache->destructor) {
63
+ cache->destructor(get_object(ptr), NULL);
64
+ }
65
+ free(ptr);
66
+ }
67
+ free(cache->name);
68
+ free(cache->ptr);
69
+ pthread_mutex_destroy(&cache->mutex);
70
+ }
71
+
72
+ void* cache_alloc(cache_t *cache) {
73
+ void *ret;
74
+ void *object;
75
+ pthread_mutex_lock(&cache->mutex);
76
+ if (cache->freecurr > 0) {
77
+ ret = cache->ptr[--cache->freecurr];
78
+ object = get_object(ret);
79
+ } else {
80
+ object = ret = malloc(cache->bufsize);
81
+ if (ret != NULL) {
82
+ object = get_object(ret);
83
+
84
+ if (cache->constructor != NULL &&
85
+ cache->constructor(object, NULL, 0) != 0) {
86
+ free(ret);
87
+ object = NULL;
88
+ }
89
+ }
90
+ }
91
+ pthread_mutex_unlock(&cache->mutex);
92
+
93
+ #ifndef NDEBUG
94
+ if (object != NULL) {
95
+ /* add a simple form of buffer-check */
96
+ uint64_t *pre = ret;
97
+ *pre = redzone_pattern;
98
+ ret = pre+1;
99
+ memcpy(((char*)ret) + cache->bufsize - (2 * sizeof(redzone_pattern)),
100
+ &redzone_pattern, sizeof(redzone_pattern));
101
+ }
102
+ #endif
103
+
104
+ return object;
105
+ }
106
+
107
+ void cache_free(cache_t *cache, void *ptr) {
108
+ pthread_mutex_lock(&cache->mutex);
109
+
110
+ #ifndef NDEBUG
111
+ /* validate redzone... */
112
+ if (memcmp(((char*)ptr) + cache->bufsize - (2 * sizeof(redzone_pattern)),
113
+ &redzone_pattern, sizeof(redzone_pattern)) != 0) {
114
+ raise(SIGABRT);
115
+ cache_error = 1;
116
+ pthread_mutex_unlock(&cache->mutex);
117
+ return;
118
+ }
119
+ uint64_t *pre = ptr;
120
+ --pre;
121
+ if (*pre != redzone_pattern) {
122
+ raise(SIGABRT);
123
+ cache_error = -1;
124
+ pthread_mutex_unlock(&cache->mutex);
125
+ return;
126
+ }
127
+ ptr = pre;
128
+ #endif
129
+ if (cache->freecurr < cache->freetotal) {
130
+ cache->ptr[cache->freecurr++] = ptr;
131
+ } else {
132
+ /* try to enlarge free connections array */
133
+ size_t newtotal = cache->freetotal * 2;
134
+ void **new_free = realloc(cache->ptr, sizeof(char *) * newtotal);
135
+ if (new_free) {
136
+ cache->freetotal = newtotal;
137
+ cache->ptr = new_free;
138
+ cache->ptr[cache->freecurr++] = ptr;
139
+ } else {
140
+ if (cache->destructor) {
141
+ cache->destructor(ptr, NULL);
142
+ }
143
+ free(ptr);
144
+
145
+ }
146
+ }
147
+ pthread_mutex_unlock(&cache->mutex);
148
+ }
149
+
@@ -0,0 +1,116 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ #ifndef CACHE_H
3
+ #define CACHE_H
4
+ #include <pthread.h>
5
+
6
+ #ifdef HAVE_UMEM_H
7
+ #include <umem.h>
8
+ #define cache_t umem_cache_t
9
+ #define cache_alloc(a) umem_cache_alloc(a, UMEM_DEFAULT)
10
+ #define cache_free(a, b) umem_cache_free(a, b)
11
+ #define cache_create(a,b,c,d,e) umem_cache_create((char*)a, b, c, d, e, NULL, NULL, NULL, 0)
12
+ #define cache_destroy(a) umem_cache_destroy(a);
13
+
14
+ #else
15
+
16
+ #ifndef NDEBUG
17
+ /* may be used for debug purposes */
18
+ extern int cache_error;
19
+ #endif
20
+
21
+ /**
22
+ * Constructor used to initialize allocated objects
23
+ *
24
+ * @param obj pointer to the object to initialized.
25
+ * @param notused1 This parameter is currently not used.
26
+ * @param notused2 This parameter is currently not used.
27
+ * @return you should return 0, but currently this is not checked
28
+ */
29
+ typedef int cache_constructor_t(void* obj, void* notused1, int notused2);
30
+ /**
31
+ * Destructor used to clean up allocated objects before they are
32
+ * returned to the operating system.
33
+ *
34
+ * @param obj pointer to the object to initialized.
35
+ * @param notused1 This parameter is currently not used.
36
+ * @param notused2 This parameter is currently not used.
37
+ * @return you should return 0, but currently this is not checked
38
+ */
39
+ typedef void cache_destructor_t(void* obj, void* notused);
40
+
41
+ /**
42
+ * Definition of the structure to keep track of the internal details of
43
+ * the cache allocator. Touching any of these variables results in
44
+ * undefined behavior.
45
+ */
46
+ typedef struct {
47
+ /** Mutex to protect access to the structure */
48
+ pthread_mutex_t mutex;
49
+ /** Name of the cache objects in this cache (provided by the caller) */
50
+ char *name;
51
+ /** List of pointers to available buffers in this cache */
52
+ void **ptr;
53
+ /** The size of each element in this cache */
54
+ size_t bufsize;
55
+ /** The capacity of the list of elements */
56
+ size_t freetotal;
57
+ /** The current number of free elements */
58
+ size_t freecurr;
59
+ /** The constructor to be called each time we allocate more memory */
60
+ cache_constructor_t* constructor;
61
+ /** The destructor to be called each time before we release memory */
62
+ cache_destructor_t* destructor;
63
+ } cache_t;
64
+
65
+ /**
66
+ * Create an object cache.
67
+ *
68
+ * The object cache will let you allocate objects of the same size. It is fully
69
+ * MT safe, so you may allocate objects from multiple threads without having to
70
+ * do any syncrhonization in the application code.
71
+ *
72
+ * @param name the name of the object cache. This name may be used for debug purposes
73
+ * and may help you track down what kind of object you have problems with
74
+ * (buffer overruns, leakage etc)
75
+ * @param bufsize the size of each object in the cache
76
+ * @param align the alignment requirements of the objects in the cache.
77
+ * @param constructor the function to be called to initialize memory when we need
78
+ * to allocate more memory from the os.
79
+ * @param destructor the function to be called before we release the memory back
80
+ * to the os.
81
+ * @return a handle to an object cache if successful, NULL otherwise.
82
+ */
83
+ cache_t* cache_create(const char* name, size_t bufsize, size_t align,
84
+ cache_constructor_t* constructor,
85
+ cache_destructor_t* destructor);
86
+ /**
87
+ * Destroy an object cache.
88
+ *
89
+ * Destroy and invalidate an object cache. You should return all buffers allocated
90
+ * with cache_alloc by using cache_free before calling this function. Not doing
91
+ * so results in undefined behavior (the buffers may or may not be invalidated)
92
+ *
93
+ * @param handle the handle to the object cache to destroy.
94
+ */
95
+ void cache_destroy(cache_t* handle);
96
+ /**
97
+ * Allocate an object from the cache.
98
+ *
99
+ * @param handle the handle to the object cache to allocate from
100
+ * @return a pointer to an initialized object from the cache, or NULL if
101
+ * the allocation cannot be satisfied.
102
+ */
103
+ void* cache_alloc(cache_t* handle);
104
+ /**
105
+ * Return an object back to the cache.
106
+ *
107
+ * The caller should return the object in an initialized state so that
108
+ * the object may be returned in an expected state from cache_alloc.
109
+ *
110
+ * @param handle handle to the object cache to return the object to
111
+ * @param ptr pointer to the object to return.
112
+ */
113
+ void cache_free(cache_t* handle, void* ptr);
114
+ #endif
115
+
116
+ #endif
@@ -0,0 +1,418 @@
1
+ /*
2
+ * Summary: Definition of the callback interface
3
+ *
4
+ * Copy: See Copyright for the status of this software.
5
+ *
6
+ * Author: Trond Norbye
7
+ */
8
+ #ifndef LIBMEMCACHEDPROTOCOL_CALLBACK_H
9
+ #define LIBMEMCACHEDPROTOCOL_CALLBACK_H
10
+
11
+ /**
12
+ * Callback to send data back from a successful GET/GETQ/GETK/GETKQ command
13
+ *
14
+ * @param cookie Just pass along the cookie supplied in the callback
15
+ * @param key What to insert as key in the reply
16
+ * @param keylen The length of the key
17
+ * @param body What to store in the body of the package
18
+ * @param bodylen The number of bytes of the body
19
+ * @param flags The flags stored with the item
20
+ * @param cas The CAS value to insert into the response (should be 0
21
+ * if you don't care)
22
+ */
23
+ typedef protocol_binary_response_status
24
+ (*memcached_binary_protocol_get_response_handler)(const void *cookie,
25
+ const void *key,
26
+ uint16_t keylen,
27
+ const void *body,
28
+ uint32_t bodylen,
29
+ uint32_t flags,
30
+ uint64_t cas);
31
+ /**
32
+ * Callback to send data back from a STAT command
33
+ *
34
+ * @param cookie Just pass along the cookie supplied in the callback
35
+ * @param key What to insert as key in the reply
36
+ * @param keylen The length of the key
37
+ * @param body What to store in the body of the package
38
+ * @param bodylen The number of bytes of the body
39
+ */
40
+ typedef protocol_binary_response_status
41
+ (*memcached_binary_protocol_stat_response_handler)(const void *cookie,
42
+ const void *key,
43
+ uint16_t keylen,
44
+ const void *body,
45
+ uint32_t bodylen);
46
+ /**
47
+ * Callback to send data back from a VERSION command
48
+ *
49
+ * @param cookie Just pass along the cookie supplied in the callback
50
+ * @param text The version string
51
+ * @param length The number of bytes in the version string
52
+ */
53
+ typedef protocol_binary_response_status
54
+ (*memcached_binary_protocol_version_response_handler)(const void *cookie,
55
+ const void *text,
56
+ uint32_t length);
57
+
58
+
59
+ /**
60
+ * In the low level interface you need to format the response
61
+ * packet yourself (giving you complete freedom :-)
62
+ *
63
+ * @param cookie Just pass along the cookie supplied in the callback
64
+ * @param request Pointer to the request packet you are sending a reply to
65
+ * @param response Pointer to the response packet to send
66
+ *
67
+ */
68
+ typedef protocol_binary_response_status (*memcached_binary_protocol_raw_response_handler)(const void *cookie,
69
+ protocol_binary_request_header *request,
70
+ protocol_binary_response_header *response);
71
+
72
+ /**
73
+ * In the low lever interface you have to do most of the work by
74
+ * yourself, but it also gives you a lot of freedom :-)
75
+ * @param cookie identification for this connection, just pass it along to
76
+ * the response handler
77
+ * @param header the command received over the wire. Never try to access
78
+ * <u>anything</u> outside the command.
79
+ * @param resonse_handler call this function to send data back to the client
80
+ */
81
+ typedef protocol_binary_response_status (*memcached_binary_protocol_command_handler)(const void *cookie,
82
+ protocol_binary_request_header *header,
83
+ memcached_binary_protocol_raw_response_handler response_handler);
84
+
85
+ /**
86
+ * The raw interface to the packets is implemented in version 0. It contains
87
+ * just an array with command handlers. The inxed in the array is the
88
+ * com code.
89
+ */
90
+ typedef struct {
91
+ memcached_binary_protocol_command_handler comcode[256];
92
+ } memcached_binary_protocol_callback_v0_st;
93
+
94
+
95
+ /**
96
+ * The first version of the callback struct containing all of the
97
+ * documented commands in the initial release of the binary protocol
98
+ * (aka. memcached 1.4.0).
99
+ *
100
+ * You might miss the Q commands (addq etc) but the response function
101
+ * knows how to deal with them so you don't need to worry about that :-)
102
+ */
103
+ typedef struct {
104
+ /**
105
+ * Add an item to the cache
106
+ * @param cookie id of the client receiving the command
107
+ * @param key the key to add
108
+ * @param len the length of the key
109
+ * @param val the value to store for the key (may be NIL)
110
+ * @param vallen the length of the data
111
+ * @param flags the flags to store with the key
112
+ * @param exptime the expiry time for the key-value pair
113
+ * @param cas the resulting cas for the add operation (if success)
114
+ */
115
+ protocol_binary_response_status (*add)(const void *cookie,
116
+ const void *key,
117
+ uint16_t keylen,
118
+ const void* val,
119
+ uint32_t vallen,
120
+ uint32_t flags,
121
+ uint32_t exptime,
122
+ uint64_t *cas);
123
+
124
+ /**
125
+ * Append data to an <b>existing</b> key-value pair.
126
+ *
127
+ * @param cookie id of the client receiving the command
128
+ * @param key the key to add data to
129
+ * @param len the length of the key
130
+ * @param val the value to append to the value
131
+ * @param vallen the length of the data
132
+ * @param cas the CAS in the request
133
+ * @param result_cas the resulting cas for the append operation
134
+ *
135
+ */
136
+ protocol_binary_response_status (*append)(const void *cookie,
137
+ const void *key,
138
+ uint16_t keylen,
139
+ const void* val,
140
+ uint32_t vallen,
141
+ uint64_t cas,
142
+ uint64_t *result_cas);
143
+
144
+ /**
145
+ * Decrement the value for a key
146
+ *
147
+ * @param cookie id of the client receiving the command
148
+ * @param key the key to decrement the value for
149
+ * @param len the length of the key
150
+ * @param delta the amount to decrement
151
+ * @param initial initial value to store (if the key doesn't exist)
152
+ * @param expiration expiration time for the object (if the key doesn't exist)
153
+ * @param cas the CAS in the request
154
+ * @param result the result from the decrement
155
+ * @param result_cas the cas of the item
156
+ *
157
+ */
158
+ protocol_binary_response_status (*decrement)(const void *cookie,
159
+ const void *key,
160
+ uint16_t keylen,
161
+ uint64_t delta,
162
+ uint64_t initial,
163
+ uint32_t expiration,
164
+ uint64_t *result,
165
+ uint64_t *result_cas);
166
+
167
+ /**
168
+ * Delete an existing key
169
+ *
170
+ * @param cookie id of the client receiving the command
171
+ * @param key the key to delete
172
+ * @param len the length of the key
173
+ * @param cas the CAS in the request
174
+ */
175
+ protocol_binary_response_status (*delete)(const void *cookie,
176
+ const void *key,
177
+ uint16_t keylen,
178
+ uint64_t cas);
179
+
180
+
181
+ /**
182
+ * Flush the cache
183
+ *
184
+ * @param cookie id of the client receiving the command
185
+ * @param when when the cache should be flushed (0 == immediately)
186
+ */
187
+ protocol_binary_response_status (*flush)(const void *cookie,
188
+ uint32_t when);
189
+
190
+
191
+
192
+ /**
193
+ * Get a key-value pair
194
+ *
195
+ * @param cookie id of the client receiving the command
196
+ * @param key the key to get
197
+ * @param len the length of the key
198
+ * @param response_handler to send the result back to the client
199
+ */
200
+ protocol_binary_response_status (*get)(const void *cookie,
201
+ const void *key,
202
+ uint16_t keylen,
203
+ memcached_binary_protocol_get_response_handler response_handler);
204
+
205
+ /**
206
+ * Increment the value for a key
207
+ *
208
+ * @param cookie id of the client receiving the command
209
+ * @param key the key to increment the value on
210
+ * @param len the length of the key
211
+ * @param delta the amount to increment
212
+ * @param initial initial value to store (if the key doesn't exist)
213
+ * @param expiration expiration time for the object (if the key doesn't exist)
214
+ * @param cas the CAS in the request
215
+ * @param result the result from the decrement
216
+ * @param result_cas the cas of the item
217
+ *
218
+ */
219
+ protocol_binary_response_status (*increment)(const void *cookie,
220
+ const void *key,
221
+ uint16_t keylen,
222
+ uint64_t delta,
223
+ uint64_t initial,
224
+ uint32_t expiration,
225
+ uint64_t *result,
226
+ uint64_t *result_cas);
227
+
228
+ /**
229
+ * The noop command was received. This is just a notification callback (the
230
+ * response is automatically created).
231
+ *
232
+ * @param cookie id of the client receiving the command
233
+ */
234
+ protocol_binary_response_status (*noop)(const void *cookie);
235
+
236
+ /**
237
+ * Prepend data to an <b>existing</b> key-value pair.
238
+ *
239
+ * @param cookie id of the client receiving the command
240
+ * @param key the key to prepend data to
241
+ * @param len the length of the key
242
+ * @param val the value to prepend to the value
243
+ * @param vallen the length of the data
244
+ * @param cas the CAS in the request
245
+ * @param result-cas the cas id of the item
246
+ *
247
+ */
248
+ protocol_binary_response_status (*prepend)(const void *cookie,
249
+ const void *key,
250
+ uint16_t keylen,
251
+ const void* val,
252
+ uint32_t vallen,
253
+ uint64_t cas,
254
+ uint64_t *result_cas);
255
+
256
+ /**
257
+ * The quit command was received. This is just a notification callback (the
258
+ * response is automatically created).
259
+ *
260
+ * @param cookie id of the client receiving the command
261
+ */
262
+ protocol_binary_response_status (*quit)(const void *cookie);
263
+
264
+
265
+ /**
266
+ * Replace an <b>existing</b> item to the cache
267
+ *
268
+ * @param cookie id of the client receiving the command
269
+ * @param key the key to replace the content for
270
+ * @param len the length of the key
271
+ * @param val the value to store for the key (may be NIL)
272
+ * @param vallen the length of the data
273
+ * @param flags the flags to store with the key
274
+ * @param exptime the expiry time for the key-value pair
275
+ * @param cas the cas id in the request
276
+ * @param result_cas the cas id of the item
277
+ */
278
+ protocol_binary_response_status (*replace)(const void *cookie,
279
+ const void *key,
280
+ uint16_t keylen,
281
+ const void* val,
282
+ uint32_t vallen,
283
+ uint32_t flags,
284
+ uint32_t exptime,
285
+ uint64_t cas,
286
+ uint64_t *result_cas);
287
+
288
+
289
+ /**
290
+ * Set a key-value pair in the cache
291
+ *
292
+ * @param cookie id of the client receiving the command
293
+ * @param key the key to insert
294
+ * @param len the length of the key
295
+ * @param val the value to store for the key (may be NIL)
296
+ * @param vallen the length of the data
297
+ * @param flags the flags to store with the key
298
+ * @param exptime the expiry time for the key-value pair
299
+ * @param cas the cas id in the request
300
+ * @param result_cas the cas id of the new item
301
+ */
302
+ protocol_binary_response_status (*set)(const void *cookie,
303
+ const void *key,
304
+ uint16_t keylen,
305
+ const void* val,
306
+ uint32_t vallen,
307
+ uint32_t flags,
308
+ uint32_t exptime,
309
+ uint64_t cas,
310
+ uint64_t *result_cas);
311
+
312
+ /**
313
+ * Get status information
314
+ *
315
+ * @param cookie id of the client receiving the command
316
+ * @param key the key to get status for (or NIL to request all status).
317
+ * Remember to insert the terminating packet if multiple
318
+ * packets should be returned.
319
+ * @param keylen the length of the key
320
+ * @param response_handler to send the result back to the client, but
321
+ * don't send reply on success!
322
+ *
323
+ */
324
+ protocol_binary_response_status (*stat)(const void *cookie,
325
+ const void *key,
326
+ uint16_t keylen,
327
+ memcached_binary_protocol_stat_response_handler response_handler);
328
+
329
+ /**
330
+ * Get the version information
331
+ *
332
+ * @param cookie id of the client receiving the command
333
+ * @param response_handler to send the result back to the client, but
334
+ * don't send reply on success!
335
+ *
336
+ */
337
+ protocol_binary_response_status (*version)(const void *cookie,
338
+ memcached_binary_protocol_version_response_handler response_handler);
339
+ } memcached_binary_protocol_callback_v1_st;
340
+
341
+
342
+ /**
343
+ * The version numbers for the different callback structures.
344
+ */
345
+ typedef enum {
346
+ /** Version 0 is a lowlevel interface that tries to maximize your freedom */
347
+ MEMCACHED_PROTOCOL_HANDLER_V0= 0,
348
+ /**
349
+ * Version 1 abstracts more of the protocol details, and let you work at
350
+ * a logical level
351
+ */
352
+ MEMCACHED_PROTOCOL_HANDLER_V1= 1,
353
+ } memcached_protocol_interface_version_t;
354
+
355
+ /**
356
+ * Definition of the protocol callback structure.
357
+ */
358
+ typedef struct {
359
+ /**
360
+ * The interface version you provide callbacks for.
361
+ */
362
+ memcached_protocol_interface_version_t interface_version;
363
+
364
+ /**
365
+ * Callback fired just before the command will be executed.
366
+ *
367
+ * @param cookie id of the client receiving the command
368
+ * @param header the command header as received on the wire. If you look
369
+ * at the content you <b>must</b> ensure that you don't
370
+ * try to access beyond the end of the message.
371
+ */
372
+ void (*pre_execute)(const void *cookie,
373
+ protocol_binary_request_header *header);
374
+ /**
375
+ * Callback fired just after the command was exected (please note
376
+ * that the data transfer back to the client is not finished at this
377
+ * time).
378
+ *
379
+ * @param cookie id of the client receiving the command
380
+ * @param header the command header as received on the wire. If you look
381
+ * at the content you <b>must</b> ensure that you don't
382
+ * try to access beyond the end of the message.
383
+ */
384
+ void (*post_execute)(const void *cookie,
385
+ protocol_binary_request_header *header);
386
+
387
+ /**
388
+ * Callback fired if no specialized callback is registered for this
389
+ * specific command code.
390
+ *
391
+ * @param cookie id of the client receiving the command
392
+ * @param header the command header as received on the wire. You <b>must</b>
393
+ * ensure that you don't try to access beyond the end of the
394
+ * message.
395
+ * @param response_handler The response handler to send data back.
396
+ */
397
+ protocol_binary_response_status (*unknown)(const void *cookie,
398
+ protocol_binary_request_header *header,
399
+ memcached_binary_protocol_raw_response_handler response_handler);
400
+
401
+ /**
402
+ * The different interface levels we support. A pointer is used so the
403
+ * size of the structure is fixed. You must ensure that the memory area
404
+ * passed as the pointer is valid as long as you use the protocol handler.
405
+ */
406
+ union {
407
+ memcached_binary_protocol_callback_v0_st v0;
408
+
409
+ /**
410
+ * The first version of the callback struct containing all of the
411
+ * documented commands in the initial release of the binary protocol
412
+ * (aka. memcached 1.4.0).
413
+ */
414
+ memcached_binary_protocol_callback_v1_st v1;
415
+ } interface;
416
+ } memcached_binary_protocol_callback_st;
417
+
418
+ #endif