libzmq.vapi 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. /* libzmq.vala
  2. *
  3. * Copyright (C) 2011 Lewis Gunsch <lewis@gunsch.ca>
  4. *
  5. * This library is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation; either
  8. * version 2.1 of the License, or (at your option) any later version.
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. * You should have received a copy of the GNU Lesser General Public
  14. * License along with this library; if not, write to the Free Software
  15. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  16. *
  17. * Author:
  18. * Lewis Gunsch <lewis@gunsch.ca>
  19. * Geoff Johnson <geoff.jay@gmail.com>
  20. */
  21. [CCode (lower_case_cprefix = "zmq_", cheader_filename = "zmq.h")]
  22. namespace ZMQ {
  23. [CCode (cprefix = "ZMQ_")]
  24. namespace Version {
  25. public const int MAJOR;
  26. public const int MINOR;
  27. public const int PATCH;
  28. [CCode (cname = "ZMQ_VERSION")]
  29. public const int VERSION;
  30. }
  31. public static void version (out int major, out int minor, out int patch);
  32. /* ZMQ error numbers, in addition to POSIX error numbers. */
  33. [CCode (cname = "EFSM")]
  34. public const int EFSM;
  35. [CCode (cname = "ENOCOMPATPROTO")]
  36. public const int ENOCOMPATPROTO;
  37. [CCode (cname = "ETERM")]
  38. public const int ETERM;
  39. [CCode (cname = "EMTHREAD")]
  40. public const int EMTHREAD;
  41. public int errno ();
  42. public unowned string strerror (int errnum);
  43. /* New context API. */
  44. [CCode (cname = "ZMQ_IO_THREADS")]
  45. public const int IO_THREADS;
  46. [CCode (cname = "ZMQ_MAX_SOCKETS")]
  47. public const int MAX_SOCKETS;
  48. [CCode (cname = "ZMQ_IO_THREADS_DFLT")]
  49. public const int IO_THREADS_DFLT;
  50. [CCode (cname = "ZMQ_MAX_SOCKETS_DFLT")]
  51. public const int MAX_SOCKETS_DFLT;
  52. [Compact]
  53. [CCode (cprefix = "zmq_ctx_", cname = "void", free_function = "zmq_ctx_destroy")]
  54. public class Context {
  55. [CCode (cname = "zmq_ctx_new")]
  56. public Context ();
  57. [CCode (cname = "zmq_ctx_set")]
  58. public int set_option (int option, int optval);
  59. [CCode (cname = "zmq_ctx_get")]
  60. public int get_option (int option);
  61. }
  62. /* Legacy context API - can't decide whether or not to remove completely. */
  63. namespace Legacy {
  64. [Compact]
  65. [CCode (cprefix = "zmq_", cname = "void", destroy_function = "zmq_ctx_destroy", free_function = "zmq_term")]
  66. public class Context {
  67. [CCode (cname = "zmq_init")]
  68. public Context (int io_threads);
  69. }
  70. }
  71. /* Message definition. */
  72. [CCode (cname = "zmq_free_fn", type = "void (*)(void *, void *)")]
  73. public delegate void free_fn (void *data);
  74. [CCode (cprefix = "zmq_msg_", cname = "zmq_msg_t", destroy_function = "zmq_msg_close", copy_function = "NO_IMPLICIT_COPY")]
  75. public struct Msg {
  76. [CCode (cname = "zmq_msg_init")]
  77. public Msg ();
  78. [CCode (cname = "zmq_msg_init_size")]
  79. public Msg.with_size (size_t size);
  80. [CCode (cname = "zmq_msg_init_data")]
  81. public Msg.with_data (owned uint8[] data, free_fn? ffn = GLib.free);
  82. [CCode (cname = "zmq_msg_send")]
  83. public int send (Socket socket, SendRecvOption flags = 0);
  84. [CCode (cname = "zmq_msg_recv")]
  85. public int recv (Socket socket, SendRecvOption flags = 0);
  86. [CCode (cname = "zmq_msg_close")]
  87. public int close ();
  88. [CCode (instance_pos = -1)]
  89. public int move (ref Msg dest);
  90. [CCode (cname = "zmq_msg_copy", instance_pos = -1)]
  91. private int _copy (ref Msg dest);
  92. [CCode (cname = "zmq_msg_copy_wrapper")]
  93. public Msg copy () {
  94. Msg msg = Msg ();
  95. this._copy (ref msg);
  96. return msg;
  97. }
  98. /* This isn't in v3.3.0, came from old vapi. */
  99. public Msg clone () {
  100. unowned uint8[] data = (uint8[]) GLib.Memory.dup((void*) this._data (), (uint) this.size ());
  101. data.length = (int) this.size ();
  102. Msg copy = Msg.with_data (data);
  103. return copy;
  104. }
  105. [CCode (cname = "zmq_msg_data")]
  106. private uint8 *_data ();
  107. public uint8[] data {
  108. get {
  109. unowned uint8[] data = (uint8[]) this._data ();
  110. data.length = (int) this.size ();
  111. return data;
  112. }
  113. }
  114. [CCode (cname = "zmq_msg_size")]
  115. public size_t size ();
  116. [CCode (cname = "zmq_msg_more")]
  117. public int more ();
  118. [CCode (cname = "zmq_msg_set")]
  119. public int set_option (int option, int optval);
  120. [CCode (cname = "zmq_msg_get")]
  121. public int get_option (int option);
  122. }
  123. [CCode (cname = "int", cprefix = "ZMQ_")]
  124. public enum SocketType {
  125. PAIR,
  126. PUB,
  127. SUB,
  128. REQ,
  129. REP,
  130. DEALER,
  131. ROUTER,
  132. PULL,
  133. PUSH,
  134. XPUB,
  135. XSUB,
  136. STREAM
  137. }
  138. [CCode (cname = "int", cprefix = "ZMQ_")]
  139. public enum SocketOption {
  140. AFFINITY,
  141. IDENTITY,
  142. SUBSCRIBE,
  143. UNSUBSCRIBE,
  144. RATE,
  145. RECOVERY_IVL,
  146. SNDBUF,
  147. RCVBUF,
  148. RCVMORE,
  149. FD,
  150. EVENTS,
  151. TYPE,
  152. LINGER,
  153. RECONNECT_IVL,
  154. BACKLOG,
  155. RECONNECT_IVL_MAX,
  156. MAXMSGSIZE,
  157. SNDHWM,
  158. RCVHWM,
  159. MULTICAST_HOPS,
  160. RCVTIMEO,
  161. SNDTIMEO,
  162. LAST_ENDPOINT,
  163. ROUTER_MANDATORY,
  164. TCP_KEEPALIVE,
  165. TCP_KEEPALIVE_CNT,
  166. TCP_KEEPALIVE_IDLE,
  167. TCP_KEEPALIVE_INTVL,
  168. TCP_ACCEPT_FILTER,
  169. IMMEDIATE,
  170. XPUB_VERBOSE,
  171. ROUTER_RAW,
  172. IPV6,
  173. MECHANISM,
  174. PLAIN_SERVER,
  175. PLAIN_USERNAME,
  176. PLAIN_PASSWORD,
  177. CURVE_SERVER,
  178. CURVE_PUBLICKEY,
  179. CURVE_SECRETKEY,
  180. CURVE_SERVERKEY,
  181. PROBE_ROUTER,
  182. REQ_REQUEST_IDS,
  183. REQ_STRICT
  184. }
  185. [CCode (cname = "int", cprefix = "ZMQ_")]
  186. public enum SendRecvOption {
  187. DONTWAIT,
  188. SNDMORE
  189. }
  190. [CCode (cname = "int", cprefix = "ZMQ_")]
  191. public enum Security {
  192. NULL,
  193. PLAIN,
  194. CURVE
  195. }
  196. [CCode (cname = "int", cprefix = "ZMQ_EVENT_")]
  197. public enum SocketTransportEvent {
  198. CONNECTED,
  199. CONNECT_DELAYED,
  200. CONNECT_RETRIED,
  201. LISTENING,
  202. BIND_FAILED,
  203. ACCEPTED,
  204. ACCEPT_FAILED,
  205. CLOSED,
  206. CLOSE_FAILED,
  207. DISCONNECTED,
  208. MONITOR_STOPPED,
  209. ALL
  210. }
  211. [CCode (cprefix = "zmq_", cname = "zmq_event_t", copy_function = "NO_IMPLICIT_COPY")]
  212. public struct SocketEvent {
  213. /* XXX don't know if this is needed, not used as a param in any library function calls */
  214. }
  215. [Compact]
  216. [CCode (cprefix = "zmq_", cname = "void", free_function = "zmq_close")]
  217. public class Socket {
  218. [CCode (cname = "zmq_socket")]
  219. public static Socket? create (Context context, SocketType type);
  220. [CCode (simple_generics = true)]
  221. public int setsockopt <T> (SocketOption option, T optval, size_t optvallen);
  222. [CCode (simple_generics = true)]
  223. public int getsockopt <T> (SocketOption option, T optval, size_t optvallen);
  224. public int bind (string addr);
  225. public int connect (string addr);
  226. public int unbind (string addr);
  227. public int disconnect (string addr);
  228. public int send ([CCode (array_length = false)] uint8[] buf, size_t len, SendRecvOption flags = 0);
  229. public int recv ([CCode (array_length = false)] uint8[] buf, size_t len, SendRecvOption flags = 0);
  230. [CCode (cname = "zmq_socket_monitor")]
  231. public int monitor (string addr, SocketTransportEvent events = 0);
  232. public int sendmsg (ref Msg msg, SendRecvOption flags = 0);
  233. public int recvmsg (ref Msg msg, SendRecvOption flags = 0);
  234. }
  235. namespace Poll {
  236. [CCode (cname = "ZMQ_POLLIN")]
  237. public const short IN;
  238. [CCode (cname = "ZMQ_POLLOUT")]
  239. public const short OUT;
  240. [CCode (cname = "ZMQ_POLLERR")]
  241. public const short ERR;
  242. [CCode (cname = "zmq_pollitem_t")]
  243. public struct PollItem {
  244. Socket *socket;
  245. int fd;
  246. short events;
  247. short revents;
  248. }
  249. [CCode (cname = "zmq_poll")]
  250. public int poll (PollItem[] items, long timeout);
  251. }
  252. /* XXX wasn't sure how to include this */
  253. namespace Proxy {
  254. [CCode (cname = "zmq_proxy")]
  255. public int proxy (Socket frontend, Socket backend, Socket capture);
  256. }
  257. /* Deprecated. */
  258. [CCode (cname = "int", cprefix = "ZMQ_")]
  259. public enum Device {
  260. STREAMER,
  261. FORWARDER,
  262. QUEUE;
  263. [CCode (cname = "zmq_device")]
  264. public int device (Socket insocket, Socket outsocket);
  265. }
  266. }