Reorganizing for greater good.
[cl-zmq.git] / src / zeromq.lisp
blob3c80465f3dfd4480ff04042379dc00b4aded7260
1 ;; Copyright (c) 2009, 2010 Vitaly Mayatskikh <v.mayatskih@gmail.com>
2 ;;
3 ;; This file is part of CL-ZMQ.
4 ;;
5 ;; Vitaly Mayatskikh grants you the rights to distribute
6 ;; and use this software as governed by the terms
7 ;; of the Lisp Lesser GNU Public License
8 ;; (http://opensource.franz.com/preamble.html),
9 ;; known as the LLGPL.
11 (in-package :zeromq)
13 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
14 ;; 0MQ basics
15 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17 (defcfun ("memcpy" %memcpy) :pointer
18 (dst :pointer)
19 (src :pointer)
20 (len :long))
22 (defcfun ("zmq_version" %version) :void
23 (major :pointer)
24 (minor :pointer)
25 (patch :pointer))
27 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28 ;; 0MQ errors.
29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31 (defcfun ("zmq_errno" %errno) :int)
33 (defcfun ("zmq_strerror" %strerror) :pointer
34 (errnum :int))
36 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37 ;; 0MQ data structures
38 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40 (defctype c-context :pointer)
42 (defctype c-socket :pointer)
44 (defcstruct c-msg
45 (_ :uchar :count 32))
47 (defcstruct c-pollitem
48 (socket c-socket)
49 (fd :int)
50 (events :short)
51 (revents :short))
53 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
54 ;; 0MQ contexts
55 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57 (defcfun ("zmq_ctx_new" ctx-new) c-context)
59 (defcfun ("zmq_ctx_get" %ctx-get) :int
60 (context c-context)
61 (option-name :int))
63 (defcfun ("zmq_ctx_set" %ctx-set) :int
64 (context c-context)
65 (option-name :int)
66 (option-value :int))
68 (defcfun ("zmq_ctx_destroy" ctx-destroy) :int
69 (context c-context))
71 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
72 ;; 0MQ sockets
73 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75 (defcfun ("zmq_socket" socket) c-socket
76 (context c-context)
77 (type :int))
79 (defcfun ("zmq_close" close) :int
80 (socket c-socket))
82 (defcfun ("zmq_getsockopt" %getsockopt) :int
83 (socket c-socket)
84 (option-name :int)
85 (option-value :pointer)
86 (option-len :pointer))
88 (defcfun ("zmq_setsockopt" %setsockopt) :int
89 (socket c-socket)
90 (option-name :int)
91 (option-value :pointer)
92 (optvallen :long))
94 (defcfun ("zmq_bind" %bind) :int
95 (socket c-socket)
96 (endpoint :pointer :char))
98 (defcfun ("zmq_unbind" %unbind) :int
99 (socket c-socket)
100 (endpoint :pointer :char))
102 (defcfun ("zmq_connect" %connect) :int
103 (socket c-socket)
104 (endpoint :pointer :char))
106 (defcfun ("zmq_disconnect" %disconnect) :int
107 (socket c-socket)
108 (endpoint :pointer :char))
110 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
111 ;; 0MQ message definition.
112 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
114 (defcfun ("zmq_msg_init" %msg-init) :int
115 (msg :pointer))
117 (defcfun ("zmq_msg_init_size" %msg-init-size) :int
118 (msg c-msg)
119 (size :long))
121 ;; This currently won't work properly for the reasons defined here
122 ;; http://13-49.blogspot.fi/2010/06/why-zero-copy-is-missing-in-cl-zmq.html
123 ;; Don't use it unless you know what you are doing.
124 (defcallback zmq-free :void ((ptr :pointer) (hint :pointer))
125 (declare (ignorable hint))
126 (foreign-free ptr))
128 (defcfun ("zmq_msg_init_data" %%msg-init-data) :int
129 (msg c-msg)
130 (data :pointer)
131 (size :long)
132 (ffn :pointer)
133 (hint :pointer))
135 (defun %zmq-init-data (msg data size)
136 (%%msg-init-data msg data size 'zmq-free))
137 ;; End of non-functional code
139 (defcfun ("zmq_msg_close" %msg-close) :int
140 (msg c-msg))
142 (defcfun ("zmq_msg_move" %msg-move) :int
143 (dest c-msg)
144 (src c-msg))
146 (defcfun ("zmq_msg_copy" %msg-copy) :int
147 (dest c-msg)
148 (src c-msg))
150 (defcfun ("zmq_msg_data" %msg-data) :pointer
151 (msg c-msg))
153 (defcfun ("zmq_msg_size" %msg-size) :int
154 (msg c-msg))
156 (defcfun ("zmq_msg_get" %msg-get) :int
157 (msg c-msg)
158 (property :int))
160 (defcfun ("zmq_msg_set" %msg-set) :int
161 (msg c-msg)
162 (property :int)
163 (value :int))
165 (defcfun ("zmq_msg_more" %msg-more) :int
166 (msg c-msg))
168 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
169 ;; 0MQ send/recieve
170 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172 (defcfun ("zmq_send" %send) :int
173 (socket c-socket)
174 (data :pointer)
175 (size :long)
176 (flags :int))
178 (defcfun ("zmq_recv" %recv) :int
179 (socket c-socket)
180 (data :pointer)
181 (size :long)
182 (flags :int))
184 (defcfun ("zmq_msg_send" %msg-send) :int
185 (msg c-msg)
186 (socket c-socket)
187 (flags :int))
189 (defcfun ("zmq_msg_recv" %msg-recv) :int
190 (msg c-msg)
191 (socket c-socket)
192 (flags :int))
194 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
195 ;; 0MQ polling
196 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
198 (defcfun ("zmq_poll" %poll) :int
199 (items :pointer)
200 (nitems :int)
201 (timeout :long))
203 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
204 ;; 0MQ proxy
205 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
207 (defcfun ("zmq_proxy" proxy) :int
208 (frontend :pointer)
209 (backend :pointer)
210 (capture :pointer))