def recv_monitor_message(socket, flags=0): """Receive and decode the given raw message from the monitoring socket and return a dict. Requires libzmq ≥ 4.0 The returned dict will have the following entries: event : int, the event id as described in libzmq.zmq_socket_monitor value : int, the event value associated with the event, see libzmq.zmq_socket_monitor endpoint : string, the affected endpoint Parameters ---------- socket : zmq PAIR socket The PAIR socket (created by other.get_monitor_socket()) on which to recv the message flags : bitfield (int) standard zmq recv flags Returns ------- event : dict event description as dict with the keys `event`, `value`, and `endpoint`. """ _check_version((4,0), 'libzmq event API') # will always return a list msg = socket.recv_multipart(flags) # 4.0-style event API return parse_monitor_message(msg)
def monitor(self, addr, events=-1): """s.monitor(addr, flags) Start publishing socket events on inproc. See libzmq docs for zmq_monitor for details. Note: requires libzmq >= 3.2 Parameters ---------- addr : str The inproc url used for monitoring. Passing None as the addr will cause an existing socket monitor to be deregistered. events : int [default: zmq.EVENT_ALL] The zmq event bitmask for which events will be sent to the monitor. """ _check_version((3, 2), "monitor") if events < 0: events = zmq.EVENT_ALL if addr is None: addr = ffi.NULL if isinstance(addr, unicode): addr = addr.encode("utf8") rc = C.zmq_socket_monitor(self._zmq_socket, addr, events)
def monitor(self, addr, events=-1): """s.monitor(addr, flags) Start publishing socket events on inproc. See libzmq docs for zmq_monitor for details. Note: requires libzmq >= 3.2 Parameters ---------- addr : str The inproc url used for monitoring. Passing None as the addr will cause an existing socket monitor to be deregistered. events : int [default: zmq.EVENT_ALL] The zmq event bitmask for which events will be sent to the monitor. """ _check_version((3, 2), "monitor") if events < 0: events = zmq.EVENT_ALL if addr is None: addr = ffi.NULL if isinstance(addr, unicode): addr = addr.encode('utf8') rc = C.zmq_socket_monitor(self._zmq_socket, addr, events)
def recv_monitor_message(socket, flags=0): """Receive and decode the given raw message from the monitoring socket and return a dict. Requires libzmq ≥ 4.0 The returned dict will have the following entries: event : int, the event id as described in libzmq.zmq_socket_monitor value : int, the event value associated with the event, see libzmq.zmq_socket_monitor endpoint : string, the affected endpoint Parameters ---------- socket : zmq PAIR socket The PAIR socket (created by other.get_monitor_socket()) on which to recv the message flags : bitfield (int) standard zmq recv flags Returns ------- event : dict event description as dict with the keys `event`, `value`, and `endpoint`. """ _check_version((4, 0), 'libzmq event API') # will always return a list msg = socket.recv_multipart(flags) # 4.0-style event API return parse_monitor_message(msg)
def has(capability): """Check for zmq capability by name (e.g. 'ipc', 'curve') .. versionadded:: libzmq-4.1 .. versionadded:: 14.1 """ _check_version((4, 1), 'zmq.has') if isinstance(capability, unicode): capability = capability.encode('utf8') return bool(C.zmq_has(capability))
def has(capability): """Check for zmq capability by name (e.g. 'ipc', 'curve') .. versionadded:: libzmq-4.1 .. versionadded:: 14.1 """ _check_version((4,1), 'zmq.has') if isinstance(capability, unicode): capability = capability.encode('utf8') return bool(C.zmq_has(capability))
def __init__(self, context=None, encoding='utf-8', log=None): _check_version((4,0), "security") self.context = context or zmq.Context.instance() self.encoding = encoding self.allow_any = False self.zap_socket = None self.whitelist = set() self.blacklist = set() # passwords is a dict keyed by domain and contains values # of dicts with username:password pairs. self.passwords = {} # certs is dict keyed by domain and contains values # of dicts keyed by the public keys from the specified location. self.certs = {} self.log = log or logging.getLogger('zmq.auth')
def __init__(self, context=None, encoding='utf-8', log=None): _check_version((4, 0), "security") self.context = context or zmq.Context.instance() self.encoding = encoding self.allow_any = False self.zap_socket = None self.whitelist = set() self.blacklist = set() # passwords is a dict keyed by domain and contains values # of dicts with username:password pairs. self.passwords = {} # certs is dict keyed by domain and contains values # of dicts keyed by the public keys from the specified location. self.certs = {} self.log = log or logging.getLogger('zmq.auth')
def curve_keypair(): """generate a Z85 keypair for use with zmq.CURVE security Requires libzmq (≥ 4.0) to have been built with CURVE support. Returns ------- (public, secret) : two bytestrings The public and private keypair as 40 byte z85-encoded bytestrings. """ _check_version((3, 2), "curve_keypair") public = ffi.new('char[64]') private = ffi.new('char[64]') rc = C.zmq_curve_keypair(public, private) _check_rc(rc) return ffi.buffer(public)[:40], ffi.buffer(private)[:40]
def curve_keypair(): """generate a Z85 keypair for use with zmq.CURVE security Requires libzmq (≥ 4.0) to have been linked with libsodium. Returns ------- (public, secret) : two bytestrings The public and private keypair as 40 byte z85-encoded bytestrings. """ _check_version((3,2), "monitor") public = ffi.new('char[64]') private = ffi.new('char[64]') rc = C.zmq_curve_keypair(public, private) _check_rc(rc) return ffi.buffer(public)[:40], ffi.buffer(private)[:40]
def monitor(self, addr, events=-1): """s.monitor(addr, flags) Start publishing socket events on inproc. See libzmq docs for zmq_monitor for details. Note: requires libzmq >= 3.2 Parameters ---------- addr : str The inproc url used for monitoring. events : int [default: zmq.EVENT_ALL] The zmq event bitmask for which events will be sent to the monitor. """ _check_version((3,2), "monitor") if events < 0: events = zmq.EVENT_ALL rc = C.zmq_socket_monitor(self._zmq_socket, addr, events)
def curve_public(private): """Compute the public key corresponding to a private key for use with zmq.CURVE security Requires libzmq (≥ 4.2) to have been built with CURVE support. Parameters ---------- private The private key as a 40 byte z85-encoded bytestring Returns ------- bytestring The public key as a 40 byte z85-encoded bytestring. """ if isinstance(private, unicode): private = private.encode('utf8') _check_version((4, 2), "curve_public") public = ffi.new('char[64]') rc = C.zmq_curve_public(public, private) _check_rc(rc) return ffi.buffer(public)[:40]
def disconnect(self, address): _check_version((3, 2), "disconnect") if isinstance(address, unicode): address = address.encode('utf8') rc = C.zmq_disconnect(self._zmq_socket, address) _check_rc(rc)
def unbind(self, address): _check_version((3, 2), "unbind") if isinstance(address, unicode): address = address.encode('utf8') rc = C.zmq_unbind(self._zmq_socket, address) _check_rc(rc)
def disconnect(self, address): _check_version((3, 2), "disconnect") if isinstance(address, unicode): address = address.encode("utf8") rc = C.zmq_disconnect(self._zmq_socket, address) _check_rc(rc)
def unbind(self, address): _check_version((3, 2), "unbind") if isinstance(address, unicode): address = address.encode("utf8") rc = C.zmq_unbind(self._zmq_socket, address) _check_rc(rc)