Fixed one missing %.
[cl-zmq.git] / src / zeromq.lisp
blob8fcc95f61e454e5b40dfd5e6b71bffd884aaba6b
1 ;; This file is part of CL-ZMQ.
3 (in-package :zeromq)
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 ;; 0MQ basics
7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9 (defcfun ("memcpy" %memcpy) :pointer
10 (dst :pointer)
11 (src :pointer)
12 (len :long))
14 (defcfun ("zmq_version" %version) :void
15 (major :pointer)
16 (minor :pointer)
17 (patch :pointer))
19 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20 ;; 0MQ errors.
21 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23 (defcfun ("zmq_errno" %errno) :int)
25 (defcfun ("zmq_strerror" %strerror) :pointer
26 (errnum :int))
28 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29 ;; 0MQ data structures
30 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
32 (defctype c-context :pointer)
34 (defctype c-socket :pointer)
36 (defcstruct c-msg
37 (_ :uchar :count 32))
39 (defcstruct c-pollitem
40 (socket c-socket)
41 (fd :int)
42 (events :short)
43 (revents :short))
45 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
46 ;; 0MQ contexts
47 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49 (defcfun ("zmq_ctx_new" %ctx-new) c-context)
51 (defcfun ("zmq_ctx_get" %ctx-get) :int
52 (context c-context)
53 (option-name :int))
55 (defcfun ("zmq_ctx_set" %ctx-set) :int
56 (context c-context)
57 (option-name :int)
58 (option-value :int))
60 (defcfun ("zmq_ctx_destroy" %ctx-destroy) :int
61 (context c-context))
63 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64 ;; 0MQ sockets
65 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
67 (defcfun ("zmq_socket" %socket) c-socket
68 (context c-context)
69 (type :int))
71 (defcfun ("zmq_close" %close) :int
72 (socket c-socket))
74 (defcfun ("zmq_getsockopt" %getsockopt) :int
75 (socket c-socket)
76 (option-name :int)
77 (option-value :pointer)
78 (option-len :pointer))
80 (defcfun ("zmq_setsockopt" %setsockopt) :int
81 (socket c-socket)
82 (option-name :int)
83 (option-value :pointer)
84 (optvallen :long))
86 (defcfun ("zmq_bind" %bind) :int
87 (socket c-socket)
88 (endpoint :pointer :char))
90 (defcfun ("zmq_unbind" %unbind) :int
91 (socket c-socket)
92 (endpoint :pointer :char))
94 (defcfun ("zmq_connect" %connect) :int
95 (socket c-socket)
96 (endpoint :pointer :char))
98 (defcfun ("zmq_disconnect" %disconnect) :int
99 (socket c-socket)
100 (endpoint :pointer :char))
102 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103 ;; 0MQ message definition.
104 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
106 (defcfun ("zmq_msg_init" %msg-init) :int
107 (msg :pointer))
109 (defcfun ("zmq_msg_init_size" %msg-init-size) :int
110 (msg c-msg)
111 (size :long))
113 ;; (xxx)freiksenet: This might not work properly. I haven't tested it myself,
114 ;; but this blog post suggest that it wont.
115 ;; http://13-49.blogspot.fi/2010/06/why-zero-copy-is-missing-in-cl-zmq.html
116 (defcallback zmq-free :void ((ptr :pointer) (hint :pointer))
117 (declare (ignorable hint))
118 (foreign-free ptr))
120 (defcfun ("zmq_msg_init_data" %%msg-init-data) :int
121 (msg c-msg)
122 (data :pointer)
123 (size :long)
124 (ffn :pointer)
125 (hint :pointer))
127 (defun %zmq-init-data (msg data size)
128 (%%msg-init-data msg data size 'zmq-free))
129 ;; End of potentially broken code
131 (defcfun ("zmq_msg_close" %msg-close) :int
132 (msg c-msg))
134 (defcfun ("zmq_msg_move" %msg-move) :int
135 (dest c-msg)
136 (src c-msg))
138 (defcfun ("zmq_msg_copy" %msg-copy) :int
139 (dest c-msg)
140 (src c-msg))
142 (defcfun ("zmq_msg_data" %msg-data) :pointer
143 (msg c-msg))
145 (defcfun ("zmq_msg_size" %msg-size) :int
146 (msg c-msg))
148 (defcfun ("zmq_msg_get" %msg-get) :int
149 (msg c-msg)
150 (property :int))
152 (defcfun ("zmq_msg_set" %msg-set) :int
153 (msg c-msg)
154 (property :int)
155 (value :int))
157 (defcfun ("zmq_msg_more" %msg-more) :int
158 (msg c-msg))
160 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
161 ;; 0MQ send/recieve
162 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
164 (defcfun ("zmq_send" %send) :int
165 (socket c-socket)
166 (data :pointer)
167 (size :long)
168 (flags :int))
170 (defcfun ("zmq_recv" %recv) :int
171 (socket c-socket)
172 (data :pointer)
173 (size :long)
174 (flags :int))
176 (defcfun ("zmq_msg_send" %msg-send) :int
177 (msg c-msg)
178 (socket c-socket)
179 (flags :int))
181 (defcfun ("zmq_msg_recv" %msg-recv) :int
182 (msg c-msg)
183 (socket c-socket)
184 (flags :int))
186 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
187 ;; 0MQ polling
188 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190 (defcfun ("zmq_poll" %poll) :int
191 (items :pointer)
192 (nitems :int)
193 (timeout :long))
195 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
196 ;; 0MQ proxy
197 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
199 (defcfun ("zmq_proxy" proxy) :int
200 (frontend :pointer)
201 (backend :pointer)
202 (capture :pointer))