2021-02-02 18:07:02 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
#include "Library/ZMQ.hpp"
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
#include <sqratConst.h>
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
namespace SqMod {
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
SQMOD_DECL_TYPENAME(SqZContext, _SC("SqZmqContext"))
|
|
|
|
SQMOD_DECL_TYPENAME(SqZSocket, _SC("SqZmqSocket"))
|
|
|
|
|
2021-02-04 06:55:10 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
static void FlushSingleString(HSQUIRRELVM, Function & callback, Buffer & data)
|
|
|
|
{
|
|
|
|
// Transform the message into a script object
|
|
|
|
LightObj o(static_cast< const SQChar * >(data.Get()),
|
|
|
|
static_cast< SQInteger >(data.Position()));
|
|
|
|
// Forward it to the callback
|
|
|
|
callback(o, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
static void FlushSingleBuffer(HSQUIRRELVM vm, Function & callback, Buffer & data)
|
|
|
|
{
|
|
|
|
// Transform the message into a script object
|
|
|
|
LightObj o(SqTypeIdentity< SqBuffer >{}, vm, std::move(data));
|
|
|
|
// Forward it to the callback
|
|
|
|
callback(o, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
static void FlushMultiString(HSQUIRRELVM vm, Function & callback, ZMsg::List & list)
|
|
|
|
{
|
|
|
|
// Create a script array
|
|
|
|
Array a(vm);
|
|
|
|
// Reserve space upfront
|
|
|
|
a.Reserve(static_cast< SQInteger >(list.size()));
|
|
|
|
// Populate the array with elements from the list
|
|
|
|
a.AppendFromCounted([&list](HSQUIRRELVM vm, SQInteger i) -> bool {
|
|
|
|
// Are we still withing range of our list?
|
|
|
|
if (static_cast< size_t >(i) < list.size())
|
|
|
|
{
|
|
|
|
// Transform the message into a script object
|
|
|
|
sq_pushstring(vm, static_cast< const SQChar * >(list[i].Get()),
|
|
|
|
static_cast< SQInteger >(list[i].Position()));
|
|
|
|
// We have an element on the stack
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
// We don't have an element on the stack
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
// Forward it to the callback
|
|
|
|
callback(a, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
static void FlushMultiBuffer(HSQUIRRELVM vm, Function & callback, ZMsg::List & list)
|
|
|
|
{
|
|
|
|
// Create a script array
|
|
|
|
Array a(vm);
|
|
|
|
// Reserve space upfront
|
|
|
|
a.Reserve(static_cast< SQInteger >(list.size()));
|
|
|
|
// Populate the array with elements from the list
|
|
|
|
a.AppendFromCounted([&list](HSQUIRRELVM vm, SQInteger i) -> bool {
|
|
|
|
// Are we still withing range of our list?
|
|
|
|
if (static_cast< size_t >(i) < list.size())
|
|
|
|
{
|
|
|
|
// Transform the message into a script object
|
|
|
|
LightObj o(SqTypeIdentity< SqBuffer >{}, vm, std::move(list[i]));
|
|
|
|
// Push it on the stack
|
|
|
|
Var< LightObj >::push(vm, o);
|
|
|
|
// We have an element on the stack
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
// We don't have an element on the stack
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
// Forward it to the callback
|
|
|
|
callback(a, true);
|
|
|
|
}
|
|
|
|
|
2021-02-02 18:07:02 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void ZSkt::Flush(HSQUIRRELVM vm)
|
|
|
|
{
|
|
|
|
// Need someone to receive the message
|
2021-02-04 06:55:10 +01:00
|
|
|
Item item;
|
2021-02-02 18:07:02 +01:00
|
|
|
// Try to get a message from the queue
|
2021-02-04 06:55:10 +01:00
|
|
|
while (mOutputQueue.try_dequeue(item))
|
2021-02-02 18:07:02 +01:00
|
|
|
{
|
|
|
|
// Is there a callback to receive the message?
|
|
|
|
if (!mOnData.IsNull())
|
|
|
|
{
|
2021-02-04 06:55:10 +01:00
|
|
|
// Is this a multi-part message?
|
|
|
|
if (!(item->mMulti))
|
2021-02-03 10:49:35 +01:00
|
|
|
{
|
2021-02-04 06:55:10 +01:00
|
|
|
if (mStringMessages)
|
|
|
|
{
|
|
|
|
FlushSingleString(vm, mOnData, item->mBuff);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FlushSingleBuffer(vm, mOnData, item->mBuff);
|
|
|
|
}
|
2021-02-03 10:49:35 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-02-04 06:55:10 +01:00
|
|
|
if (mStringMessages)
|
|
|
|
{
|
|
|
|
FlushMultiString(vm, mOnData, item->mList);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FlushMultiBuffer(vm, mOnData, item->mList);
|
|
|
|
}
|
2021-02-03 10:49:35 +01:00
|
|
|
}
|
2021-02-02 18:07:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
LightObj ZContext::Socket(int type) const
|
|
|
|
{
|
|
|
|
return LightObj(SqTypeIdentity< ZSocket >{}, SqVM(), *this, type);
|
|
|
|
}
|
2021-02-02 20:36:07 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-02-03 10:49:35 +01:00
|
|
|
LightObj ZSocket::GetOpt(int opt)
|
2021-02-02 20:36:07 +01:00
|
|
|
{
|
|
|
|
int r = 0;
|
2021-02-03 10:49:35 +01:00
|
|
|
// Acquire exclusive access to the socket
|
|
|
|
std::lock_guard< std::mutex > guard(Valid().mMtx);
|
2021-02-02 20:36:07 +01:00
|
|
|
// Identify option
|
|
|
|
switch (opt)
|
|
|
|
{
|
|
|
|
// int
|
|
|
|
case ZMQ_BACKLOG:
|
|
|
|
case ZMQ_CONFLATE:
|
|
|
|
case ZMQ_CONNECT_TIMEOUT:
|
|
|
|
case ZMQ_CURVE_SERVER:
|
|
|
|
case ZMQ_GSSAPI_PLAINTEXT:
|
|
|
|
case ZMQ_GSSAPI_SERVER:
|
|
|
|
case ZMQ_GSSAPI_PRINCIPAL_NAMETYPE:
|
|
|
|
case ZMQ_HANDSHAKE_IVL:
|
|
|
|
case ZMQ_HEARTBEAT_IVL:
|
|
|
|
case ZMQ_HEARTBEAT_TIMEOUT:
|
|
|
|
case ZMQ_HEARTBEAT_TTL:
|
|
|
|
case ZMQ_IMMEDIATE:
|
|
|
|
case ZMQ_INVERT_MATCHING:
|
|
|
|
case ZMQ_IPV6:
|
|
|
|
case ZMQ_LINGER:
|
|
|
|
case ZMQ_MULTICAST_HOPS:
|
|
|
|
case ZMQ_MULTICAST_MAXTPDU:
|
|
|
|
case ZMQ_PLAIN_SERVER:
|
|
|
|
case ZMQ_USE_FD:
|
|
|
|
case ZMQ_PROBE_ROUTER:
|
|
|
|
case ZMQ_RATE:
|
|
|
|
case ZMQ_RCVBUF:
|
|
|
|
case ZMQ_RCVHWM:
|
|
|
|
case ZMQ_RCVTIMEO:
|
|
|
|
case ZMQ_RECONNECT_IVL:
|
|
|
|
case ZMQ_RECONNECT_IVL_MAX:
|
|
|
|
case ZMQ_RECOVERY_IVL:
|
|
|
|
case ZMQ_REQ_CORRELATE:
|
|
|
|
case ZMQ_REQ_RELAXED:
|
|
|
|
case ZMQ_ROUTER_HANDOVER:
|
|
|
|
case ZMQ_ROUTER_MANDATORY:
|
|
|
|
case ZMQ_ROUTER_RAW:
|
|
|
|
case ZMQ_SNDBUF:
|
|
|
|
case ZMQ_SNDHWM:
|
|
|
|
case ZMQ_SNDTIMEO:
|
|
|
|
case ZMQ_STREAM_NOTIFY:
|
|
|
|
case ZMQ_TCP_KEEPALIVE:
|
|
|
|
case ZMQ_TCP_KEEPALIVE_CNT:
|
|
|
|
case ZMQ_TCP_KEEPALIVE_IDLE:
|
|
|
|
case ZMQ_TCP_KEEPALIVE_INTVL:
|
|
|
|
case ZMQ_TCP_MAXRT:
|
|
|
|
case ZMQ_TOS:
|
|
|
|
case ZMQ_XPUB_VERBOSE:
|
|
|
|
case ZMQ_XPUB_VERBOSER:
|
|
|
|
case ZMQ_XPUB_MANUAL:
|
|
|
|
case ZMQ_XPUB_NODROP:
|
|
|
|
case ZMQ_IPV4ONLY:
|
|
|
|
case ZMQ_VMCI_CONNECT_TIMEOUT: {
|
|
|
|
int out;
|
|
|
|
size_t len = sizeof(out);
|
|
|
|
r = zmq_getsockopt(Valid(), opt, &out, &len);
|
|
|
|
// Validate and return it
|
|
|
|
if (r == 0)
|
|
|
|
{
|
|
|
|
sq_pushinteger(SqVM(), out);
|
|
|
|
LightObj o(-1);
|
|
|
|
sq_poptop(SqVM());
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
// character string
|
|
|
|
case ZMQ_BINDTODEVICE:
|
|
|
|
case ZMQ_GSSAPI_PRINCIPAL:
|
|
|
|
case ZMQ_GSSAPI_SERVICE_PRINCIPAL:
|
|
|
|
case ZMQ_PLAIN_PASSWORD:
|
|
|
|
case ZMQ_PLAIN_USERNAME:
|
|
|
|
case ZMQ_SOCKS_PROXY:
|
|
|
|
case ZMQ_ZAP_DOMAIN: {
|
|
|
|
SQChar out[1024]; // Let's hope this is reasonable. I really don't care much about this feature.
|
|
|
|
size_t len = sizeof(out);
|
|
|
|
r = zmq_getsockopt(Valid(), opt, &out, &len);
|
|
|
|
// Validate and return it
|
|
|
|
if (r == 0)
|
|
|
|
{
|
|
|
|
return LightObj(out, static_cast< SQInteger >(len));
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
// uint64_t
|
|
|
|
case ZMQ_AFFINITY:
|
|
|
|
case ZMQ_VMCI_BUFFER_SIZE:
|
|
|
|
case ZMQ_VMCI_BUFFER_MIN_SIZE:
|
|
|
|
case ZMQ_VMCI_BUFFER_MAX_SIZE: {
|
|
|
|
uint64_t out;
|
|
|
|
size_t len = sizeof(out);
|
|
|
|
r = zmq_getsockopt(Valid(), opt, &out, &len);
|
|
|
|
// Validate and return it
|
|
|
|
if (r == 0)
|
|
|
|
{
|
|
|
|
sq_pushinteger(SqVM(), static_cast< SQInteger >(out));
|
|
|
|
LightObj o(-1);
|
|
|
|
sq_poptop(SqVM());
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
// int64_t
|
|
|
|
case ZMQ_MAXMSGSIZE: {
|
|
|
|
int64_t out;
|
|
|
|
size_t len = sizeof(out);
|
|
|
|
r = zmq_getsockopt(Valid(), opt, &out, &len);
|
|
|
|
// Validate and return it
|
|
|
|
if (r == 0)
|
|
|
|
{
|
|
|
|
sq_pushinteger(SqVM(), static_cast< SQInteger >(out));
|
|
|
|
LightObj o(-1);
|
|
|
|
sq_poptop(SqVM());
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
// binary data
|
|
|
|
case ZMQ_CONNECT_ROUTING_ID:
|
|
|
|
case ZMQ_CURVE_PUBLICKEY:
|
|
|
|
case ZMQ_CURVE_SECRETKEY:
|
|
|
|
case ZMQ_CURVE_SERVERKEY:
|
|
|
|
case ZMQ_ROUTING_ID:
|
|
|
|
case ZMQ_SUBSCRIBE:
|
|
|
|
case ZMQ_UNSUBSCRIBE:
|
|
|
|
case ZMQ_XPUB_WELCOME_MSG:
|
|
|
|
case ZMQ_TCP_ACCEPT_FILTER: {
|
|
|
|
Buffer out(4096); // Let's hope this is reasonable. I really don't care much about this feature.
|
|
|
|
size_t len = out.Size();
|
|
|
|
r = zmq_getsockopt(Valid(), opt, &out, &len);
|
|
|
|
out.Move(static_cast< SQInteger >(len));
|
|
|
|
// Validate and return it
|
|
|
|
if (r == 0)
|
|
|
|
{
|
|
|
|
return LightObj(SqTypeIdentity< SqBuffer >{}, SqVM(), std::move(out));
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
default: STHROWF("Unknown socket option");
|
|
|
|
}
|
|
|
|
// Validate result
|
|
|
|
if (r != 0)
|
|
|
|
{
|
2021-02-03 10:49:35 +01:00
|
|
|
STHROWF("Unable to retrieve socket option: [{}] {}", r, zmq_strerror(errno));
|
2021-02-02 20:36:07 +01:00
|
|
|
}
|
2021-02-04 22:27:43 +01:00
|
|
|
SQ_UNREACHABLE
|
2021-02-02 20:36:07 +01:00
|
|
|
// Never reaches here
|
|
|
|
return LightObj();
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void ZSocket::SetOpt(int opt, LightObj & value)
|
|
|
|
{
|
|
|
|
int r = 0;
|
2021-02-03 10:49:35 +01:00
|
|
|
// Acquire exclusive access to the socket
|
|
|
|
std::lock_guard< std::mutex > guard(Valid().mMtx);
|
2021-02-02 20:36:07 +01:00
|
|
|
// Identify option
|
|
|
|
switch (opt)
|
|
|
|
{
|
|
|
|
// int
|
|
|
|
case ZMQ_BACKLOG:
|
|
|
|
case ZMQ_CONFLATE:
|
|
|
|
case ZMQ_CONNECT_TIMEOUT:
|
|
|
|
case ZMQ_CURVE_SERVER:
|
|
|
|
case ZMQ_GSSAPI_PLAINTEXT:
|
|
|
|
case ZMQ_GSSAPI_SERVER:
|
|
|
|
case ZMQ_GSSAPI_PRINCIPAL_NAMETYPE:
|
|
|
|
case ZMQ_HANDSHAKE_IVL:
|
|
|
|
case ZMQ_HEARTBEAT_IVL:
|
|
|
|
case ZMQ_HEARTBEAT_TIMEOUT:
|
|
|
|
case ZMQ_HEARTBEAT_TTL:
|
|
|
|
case ZMQ_IMMEDIATE:
|
|
|
|
case ZMQ_INVERT_MATCHING:
|
|
|
|
case ZMQ_IPV6:
|
|
|
|
case ZMQ_LINGER:
|
|
|
|
case ZMQ_MULTICAST_HOPS:
|
|
|
|
case ZMQ_MULTICAST_MAXTPDU:
|
|
|
|
case ZMQ_PLAIN_SERVER:
|
|
|
|
case ZMQ_USE_FD:
|
|
|
|
case ZMQ_PROBE_ROUTER:
|
|
|
|
case ZMQ_RATE:
|
|
|
|
case ZMQ_RCVBUF:
|
|
|
|
case ZMQ_RCVHWM:
|
|
|
|
case ZMQ_RCVTIMEO:
|
|
|
|
case ZMQ_RECONNECT_IVL:
|
|
|
|
case ZMQ_RECONNECT_IVL_MAX:
|
|
|
|
case ZMQ_RECOVERY_IVL:
|
|
|
|
case ZMQ_REQ_CORRELATE:
|
|
|
|
case ZMQ_REQ_RELAXED:
|
|
|
|
case ZMQ_ROUTER_HANDOVER:
|
|
|
|
case ZMQ_ROUTER_MANDATORY:
|
|
|
|
case ZMQ_ROUTER_RAW:
|
|
|
|
case ZMQ_SNDBUF:
|
|
|
|
case ZMQ_SNDHWM:
|
|
|
|
case ZMQ_SNDTIMEO:
|
|
|
|
case ZMQ_STREAM_NOTIFY:
|
|
|
|
case ZMQ_TCP_KEEPALIVE:
|
|
|
|
case ZMQ_TCP_KEEPALIVE_CNT:
|
|
|
|
case ZMQ_TCP_KEEPALIVE_IDLE:
|
|
|
|
case ZMQ_TCP_KEEPALIVE_INTVL:
|
|
|
|
case ZMQ_TCP_MAXRT:
|
|
|
|
case ZMQ_TOS:
|
|
|
|
case ZMQ_XPUB_VERBOSE:
|
|
|
|
case ZMQ_XPUB_VERBOSER:
|
|
|
|
case ZMQ_XPUB_MANUAL:
|
|
|
|
case ZMQ_XPUB_NODROP:
|
|
|
|
case ZMQ_IPV4ONLY:
|
|
|
|
case ZMQ_VMCI_CONNECT_TIMEOUT: {
|
|
|
|
auto in = value.Cast< int >();
|
|
|
|
r = zmq_setsockopt(Valid(), opt, &in, sizeof(in));
|
|
|
|
} break;
|
|
|
|
// character string
|
|
|
|
case ZMQ_BINDTODEVICE:
|
|
|
|
case ZMQ_GSSAPI_PRINCIPAL:
|
|
|
|
case ZMQ_GSSAPI_SERVICE_PRINCIPAL:
|
|
|
|
case ZMQ_PLAIN_PASSWORD:
|
|
|
|
case ZMQ_PLAIN_USERNAME:
|
|
|
|
case ZMQ_SOCKS_PROXY:
|
|
|
|
case ZMQ_ZAP_DOMAIN: {
|
|
|
|
Var<LightObj>::push(SqVM(), value);
|
|
|
|
StackStrF str(SqVM(), -1);
|
|
|
|
if (SQ_SUCCEEDED(str.Proc(false)))
|
|
|
|
{
|
|
|
|
r = zmq_setsockopt(Valid(), opt, str.mPtr, str.GetSize());
|
|
|
|
} else r = -1;
|
|
|
|
sq_poptop(SqVM());
|
|
|
|
} break;
|
|
|
|
// uint64_t
|
|
|
|
case ZMQ_AFFINITY:
|
|
|
|
case ZMQ_VMCI_BUFFER_SIZE:
|
|
|
|
case ZMQ_VMCI_BUFFER_MIN_SIZE:
|
|
|
|
case ZMQ_VMCI_BUFFER_MAX_SIZE: {
|
|
|
|
auto in = value.Cast< uint64_t >();
|
|
|
|
r = zmq_setsockopt(Valid(), opt, &in, sizeof(in));
|
|
|
|
} break;
|
|
|
|
// int64_t
|
|
|
|
case ZMQ_MAXMSGSIZE: {
|
|
|
|
auto in = value.Cast< int64_t >();
|
|
|
|
r = zmq_setsockopt(Valid(), opt, &in, sizeof(in));
|
|
|
|
} break;
|
|
|
|
// binary data
|
|
|
|
case ZMQ_CONNECT_ROUTING_ID:
|
|
|
|
case ZMQ_CURVE_PUBLICKEY:
|
|
|
|
case ZMQ_CURVE_SECRETKEY:
|
|
|
|
case ZMQ_CURVE_SERVERKEY:
|
|
|
|
case ZMQ_ROUTING_ID:
|
|
|
|
case ZMQ_SUBSCRIBE:
|
|
|
|
case ZMQ_UNSUBSCRIBE:
|
|
|
|
case ZMQ_XPUB_WELCOME_MSG:
|
|
|
|
case ZMQ_TCP_ACCEPT_FILTER: {
|
2021-02-04 22:27:43 +01:00
|
|
|
// Is this a string?
|
|
|
|
if (value.GetType() == OT_STRING)
|
|
|
|
{
|
|
|
|
|
|
|
|
// Push the stringobject on the stack
|
|
|
|
Var< LightObj >::push(SqVM(), value);
|
|
|
|
// Prepare for string extraction
|
|
|
|
StackStrF str(SqVM(), -1);
|
|
|
|
// Attempt to extract the string
|
|
|
|
if (SQ_SUCCEEDED(str.Proc(false)))
|
|
|
|
{
|
|
|
|
r = zmq_setsockopt(Valid(), opt, str.mPtr, static_cast< size_t >(str.mLen));
|
|
|
|
// Pop the string object from the stack
|
|
|
|
sq_poptop(SqVM());
|
|
|
|
}
|
|
|
|
// Failed
|
|
|
|
else
|
|
|
|
{
|
|
|
|
STHROWF("Invalid string value");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Is this a binary buffer?
|
|
|
|
else if (value.GetTypeTag() != StaticClassTypeTag< SqBuffer >::Get())
|
2021-02-02 20:36:07 +01:00
|
|
|
{
|
|
|
|
STHROWF("Invalid buffer value");
|
|
|
|
}
|
2021-02-04 22:27:43 +01:00
|
|
|
else
|
2021-02-02 20:36:07 +01:00
|
|
|
{
|
2021-02-04 22:27:43 +01:00
|
|
|
auto * inst = value.CastI< SqBuffer >();
|
|
|
|
// Validate the instance
|
|
|
|
if (inst)
|
|
|
|
{
|
|
|
|
r = zmq_setsockopt(Valid(), opt, inst->GetRef()->Data(), static_cast< size_t >(inst->GetPosition()));
|
|
|
|
// Failed
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
STHROWF("Invalid instance value");
|
|
|
|
}
|
|
|
|
}
|
2021-02-02 20:36:07 +01:00
|
|
|
} break;
|
|
|
|
default: STHROWF("Unknown socket option");
|
|
|
|
}
|
|
|
|
// Validate result
|
|
|
|
if (r != 0)
|
|
|
|
{
|
2021-02-03 10:49:35 +01:00
|
|
|
STHROWF("Unable to modify socket option: [{}] {}", r, zmq_strerror(errno));
|
2021-02-02 20:36:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-02-02 19:31:21 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
static String SqZmqVersion()
|
|
|
|
{
|
|
|
|
int major=0, minor=0, patch=0;
|
|
|
|
zmq_version(&major, &minor, &patch);
|
|
|
|
return fmt::format("{}.{}.{}", major, minor, patch);
|
|
|
|
}
|
2021-02-02 18:07:02 +01:00
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-02-02 19:31:21 +01:00
|
|
|
static void SqZmqProcess()
|
2021-02-02 18:07:02 +01:00
|
|
|
{
|
|
|
|
// Go over all sockets and try to update them
|
|
|
|
for (ZSkt * inst = ZSkt::sHead; inst && inst->mNext != ZSkt::sHead; inst = inst->mNext)
|
|
|
|
{
|
|
|
|
// Flush pending messages
|
|
|
|
inst->Flush(SqVM());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void ZmqTerminate()
|
|
|
|
{
|
|
|
|
// Go over all sockets and try to close them
|
|
|
|
for (ZSkt * inst = ZSkt::sHead; inst && inst->mNext != ZSkt::sHead; inst = inst->mNext)
|
|
|
|
{
|
|
|
|
// Close the socket
|
|
|
|
inst->Close();
|
|
|
|
// Flush pending messages
|
|
|
|
inst->Flush(SqVM());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ================================================================================================
|
|
|
|
void Register_ZMQ(HSQUIRRELVM vm)
|
|
|
|
{
|
|
|
|
Table ns(vm);
|
|
|
|
|
2021-02-02 19:31:21 +01:00
|
|
|
ns.Func(_SC("Process"), &SqZmqProcess);
|
|
|
|
ns.Func(_SC("Version"), &SqZmqVersion);
|
2021-02-02 18:07:02 +01:00
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
ns.Bind(_SC("Context"),
|
|
|
|
Class< ZContext, NoCopy< ZContext > >(vm, SqZContext::Str)
|
|
|
|
// Constructors
|
|
|
|
.Ctor()
|
|
|
|
// Meta-methods
|
|
|
|
.SquirrelFunc(_SC("_typename"), &SqZContext::Fn)
|
|
|
|
// Properties
|
|
|
|
.Prop(_SC("IsNull"), &ZContext::IsNull)
|
|
|
|
// Member Methods
|
|
|
|
.Func(_SC("Get"), &ZContext::Get)
|
|
|
|
.Func(_SC("Set"), &ZContext::Set)
|
|
|
|
.Func(_SC("Shutdown"), &ZContext::Shutdown)
|
|
|
|
.Func(_SC("Socket"), &ZContext::Socket)
|
|
|
|
);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
ns.Bind(_SC("Socket"),
|
|
|
|
Class< ZSocket, NoCopy< ZSocket > >(vm, SqZSocket::Str)
|
|
|
|
// Constructors
|
|
|
|
.Ctor()
|
|
|
|
// Meta-methods
|
|
|
|
.SquirrelFunc(_SC("_typename"), &SqZSocket::Fn)
|
|
|
|
// Properties
|
|
|
|
.Prop(_SC("IsNull"), &ZSocket::IsNull)
|
2021-02-03 10:49:35 +01:00
|
|
|
.Prop(_SC("StringMessages"), &ZSocket::GetStringMessages, &ZSocket::SetStringMessages)
|
2021-02-02 18:07:02 +01:00
|
|
|
// Member Methods
|
2021-02-02 19:31:21 +01:00
|
|
|
.CbFunc(_SC("OnData"), &ZSocket::OnData)
|
|
|
|
.FmtFunc(_SC("Bind"), &ZSocket::Bind)
|
|
|
|
.FmtFunc(_SC("Connect"), &ZSocket::Connect)
|
|
|
|
.FmtFunc(_SC("Disconnect"), &ZSocket::Disconnect)
|
2021-02-02 18:07:02 +01:00
|
|
|
.Func(_SC("Close"), &ZSocket::Close)
|
2021-02-03 10:49:35 +01:00
|
|
|
.Func(_SC("SendBuffer"), &ZSocket::SendBuffer)
|
2021-02-02 19:31:21 +01:00
|
|
|
.FmtFunc(_SC("SendString"), &ZSocket::SendString)
|
2021-02-03 10:49:35 +01:00
|
|
|
.Func(_SC("SendBuffers"), &ZSocket::SendBuffers)
|
2021-02-02 19:31:21 +01:00
|
|
|
.Func(_SC("SendStrings"), &ZSocket::SendStrings)
|
2021-02-02 20:36:07 +01:00
|
|
|
.Func(_SC("GetOpt"), &ZSocket::GetOpt)
|
|
|
|
.Func(_SC("SetOpt"), &ZSocket::SetOpt)
|
2021-02-02 18:07:02 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
RootTable(vm).Bind(_SC("SqZMQ"), ns);
|
|
|
|
|
|
|
|
ConstTable(vm).Enum(_SC("SqZmq"), Enumeration(vm)
|
|
|
|
/* Context options */
|
|
|
|
.Const(_SC("IO_THREADS"), int32_t(ZMQ_IO_THREADS))
|
|
|
|
.Const(_SC("MAX_SOCKETS"), int32_t(ZMQ_MAX_SOCKETS))
|
|
|
|
.Const(_SC("SOCKET_LIMIT"), int32_t(ZMQ_SOCKET_LIMIT))
|
|
|
|
.Const(_SC("THREAD_PRIORITY"), int32_t(ZMQ_THREAD_PRIORITY))
|
|
|
|
.Const(_SC("THREAD_SCHED_POLICY"), int32_t(ZMQ_THREAD_SCHED_POLICY))
|
|
|
|
.Const(_SC("MAX_MSGSZ"), int32_t(ZMQ_MAX_MSGSZ))
|
|
|
|
.Const(_SC("MSG_T_SIZE"), int32_t(ZMQ_MSG_T_SIZE))
|
|
|
|
.Const(_SC("THREAD_AFFINITY_CPU_ADD"), int32_t(ZMQ_THREAD_AFFINITY_CPU_ADD))
|
|
|
|
.Const(_SC("THREAD_AFFINITY_CPU_REMOVE"), int32_t(ZMQ_THREAD_AFFINITY_CPU_REMOVE))
|
|
|
|
.Const(_SC("THREAD_NAME_PREFIX"), int32_t(ZMQ_THREAD_NAME_PREFIX))
|
|
|
|
/* Socket types. */
|
|
|
|
.Const(_SC("PAIR"), int32_t(ZMQ_PAIR))
|
|
|
|
.Const(_SC("PUB"), int32_t(ZMQ_PUB))
|
|
|
|
.Const(_SC("SUB"), int32_t(ZMQ_SUB))
|
|
|
|
.Const(_SC("REQ"), int32_t(ZMQ_REQ))
|
|
|
|
.Const(_SC("REP"), int32_t(ZMQ_REP))
|
|
|
|
.Const(_SC("DEALER"), int32_t(ZMQ_DEALER))
|
|
|
|
.Const(_SC("ROUTER"), int32_t(ZMQ_ROUTER))
|
|
|
|
.Const(_SC("PULL"), int32_t(ZMQ_PULL))
|
|
|
|
.Const(_SC("PUSH"), int32_t(ZMQ_PUSH))
|
|
|
|
.Const(_SC("XPUB"), int32_t(ZMQ_XPUB))
|
|
|
|
.Const(_SC("XSUB"), int32_t(ZMQ_XSUB))
|
|
|
|
.Const(_SC("STREAM"), int32_t(ZMQ_STREAM))
|
|
|
|
/* Socket options */
|
|
|
|
.Const(_SC("AFFINITY"), int32_t(ZMQ_AFFINITY))
|
|
|
|
.Const(_SC("ROUTING_ID"), int32_t(ZMQ_ROUTING_ID))
|
|
|
|
.Const(_SC("SUBSCRIBE"), int32_t(ZMQ_SUBSCRIBE))
|
|
|
|
.Const(_SC("UNSUBSCRIBE"), int32_t(ZMQ_UNSUBSCRIBE))
|
|
|
|
.Const(_SC("RATE"), int32_t(ZMQ_RATE))
|
|
|
|
.Const(_SC("RECOVERY_IVL"), int32_t(ZMQ_RECOVERY_IVL))
|
|
|
|
.Const(_SC("SNDBUF"), int32_t(ZMQ_SNDBUF))
|
|
|
|
.Const(_SC("RCVBUF"), int32_t(ZMQ_RCVBUF))
|
|
|
|
.Const(_SC("RCVMORE"), int32_t(ZMQ_RCVMORE))
|
|
|
|
.Const(_SC("FD"), int32_t(ZMQ_FD))
|
|
|
|
.Const(_SC("EVENTS"), int32_t(ZMQ_EVENTS))
|
|
|
|
.Const(_SC("TYPE"), int32_t(ZMQ_TYPE))
|
|
|
|
.Const(_SC("LINGER"), int32_t(ZMQ_LINGER))
|
|
|
|
.Const(_SC("RECONNECT_IVL"), int32_t(ZMQ_RECONNECT_IVL))
|
|
|
|
.Const(_SC("BACKLOG"), int32_t(ZMQ_BACKLOG))
|
|
|
|
.Const(_SC("RECONNECT_IVL_MAX"), int32_t(ZMQ_RECONNECT_IVL_MAX))
|
|
|
|
.Const(_SC("MAXMSGSIZE"), int32_t(ZMQ_MAXMSGSIZE))
|
|
|
|
.Const(_SC("SNDHWM"), int32_t(ZMQ_SNDHWM))
|
|
|
|
.Const(_SC("RCVHWM"), int32_t(ZMQ_RCVHWM))
|
|
|
|
.Const(_SC("MULTICAST_HOPS"), int32_t(ZMQ_MULTICAST_HOPS))
|
|
|
|
.Const(_SC("RCVTIMEO"), int32_t(ZMQ_RCVTIMEO))
|
|
|
|
.Const(_SC("SNDTIMEO"), int32_t(ZMQ_SNDTIMEO))
|
|
|
|
.Const(_SC("LAST_ENDPOINT"), int32_t(ZMQ_LAST_ENDPOINT))
|
|
|
|
.Const(_SC("ROUTER_MANDATORY"), int32_t(ZMQ_ROUTER_MANDATORY))
|
|
|
|
.Const(_SC("TCP_KEEPALIVE"), int32_t(ZMQ_TCP_KEEPALIVE))
|
|
|
|
.Const(_SC("TCP_KEEPALIVE_CNT"), int32_t(ZMQ_TCP_KEEPALIVE_CNT))
|
|
|
|
.Const(_SC("TCP_KEEPALIVE_IDLE"), int32_t(ZMQ_TCP_KEEPALIVE_IDLE))
|
|
|
|
.Const(_SC("TCP_KEEPALIVE_INTVL"), int32_t(ZMQ_TCP_KEEPALIVE_INTVL))
|
|
|
|
.Const(_SC("IMMEDIATE"), int32_t(ZMQ_IMMEDIATE))
|
|
|
|
.Const(_SC("XPUB_VERBOSE"), int32_t(ZMQ_XPUB_VERBOSE))
|
|
|
|
.Const(_SC("ROUTER_RAW"), int32_t(ZMQ_ROUTER_RAW))
|
|
|
|
.Const(_SC("IPV6"), int32_t(ZMQ_IPV6))
|
|
|
|
.Const(_SC("MECHANISM"), int32_t(ZMQ_MECHANISM))
|
|
|
|
.Const(_SC("PLAIN_SERVER"), int32_t(ZMQ_PLAIN_SERVER))
|
|
|
|
.Const(_SC("PLAIN_USERNAME"), int32_t(ZMQ_PLAIN_USERNAME))
|
|
|
|
.Const(_SC("PLAIN_PASSWORD"), int32_t(ZMQ_PLAIN_PASSWORD))
|
|
|
|
.Const(_SC("CURVE_SERVER"), int32_t(ZMQ_CURVE_SERVER))
|
|
|
|
.Const(_SC("CURVE_PUBLICKEY"), int32_t(ZMQ_CURVE_PUBLICKEY))
|
|
|
|
.Const(_SC("CURVE_SECRETKEY"), int32_t(ZMQ_CURVE_SECRETKEY))
|
|
|
|
.Const(_SC("CURVE_SERVERKEY"), int32_t(ZMQ_CURVE_SERVERKEY))
|
|
|
|
.Const(_SC("PROBE_ROUTER"), int32_t(ZMQ_PROBE_ROUTER))
|
|
|
|
.Const(_SC("REQ_CORRELATE"), int32_t(ZMQ_REQ_CORRELATE))
|
|
|
|
.Const(_SC("REQ_RELAXED"), int32_t(ZMQ_REQ_RELAXED))
|
|
|
|
.Const(_SC("CONFLATE"), int32_t(ZMQ_CONFLATE))
|
|
|
|
.Const(_SC("ZAP_DOMAIN"), int32_t(ZMQ_ZAP_DOMAIN))
|
|
|
|
.Const(_SC("ROUTER_HANDOVER"), int32_t(ZMQ_ROUTER_HANDOVER))
|
|
|
|
.Const(_SC("TOS"), int32_t(ZMQ_TOS))
|
|
|
|
.Const(_SC("CONNECT_ROUTING_ID"), int32_t(ZMQ_CONNECT_ROUTING_ID))
|
|
|
|
.Const(_SC("GSSAPI_SERVER"), int32_t(ZMQ_GSSAPI_SERVER))
|
|
|
|
.Const(_SC("GSSAPI_PRINCIPAL"), int32_t(ZMQ_GSSAPI_PRINCIPAL))
|
|
|
|
.Const(_SC("GSSAPI_SERVICE_PRINCIPAL"), int32_t(ZMQ_GSSAPI_SERVICE_PRINCIPAL))
|
|
|
|
.Const(_SC("GSSAPI_PLAINTEXT"), int32_t(ZMQ_GSSAPI_PLAINTEXT))
|
|
|
|
.Const(_SC("HANDSHAKE_IVL"), int32_t(ZMQ_HANDSHAKE_IVL))
|
|
|
|
.Const(_SC("SOCKS_PROXY"), int32_t(ZMQ_SOCKS_PROXY))
|
|
|
|
.Const(_SC("XPUB_NODROP"), int32_t(ZMQ_XPUB_NODROP))
|
|
|
|
.Const(_SC("BLOCKY"), int32_t(ZMQ_BLOCKY))
|
|
|
|
.Const(_SC("XPUB_MANUAL"), int32_t(ZMQ_XPUB_MANUAL))
|
|
|
|
.Const(_SC("XPUB_WELCOME_MSG"), int32_t(ZMQ_XPUB_WELCOME_MSG))
|
|
|
|
.Const(_SC("STREAM_NOTIFY"), int32_t(ZMQ_STREAM_NOTIFY))
|
|
|
|
.Const(_SC("INVERT_MATCHING"), int32_t(ZMQ_INVERT_MATCHING))
|
|
|
|
.Const(_SC("HEARTBEAT_IVL"), int32_t(ZMQ_HEARTBEAT_IVL))
|
|
|
|
.Const(_SC("HEARTBEAT_TTL"), int32_t(ZMQ_HEARTBEAT_TTL))
|
|
|
|
.Const(_SC("HEARTBEAT_TIMEOUT"), int32_t(ZMQ_HEARTBEAT_TIMEOUT))
|
|
|
|
.Const(_SC("XPUB_VERBOSER"), int32_t(ZMQ_XPUB_VERBOSER))
|
|
|
|
.Const(_SC("CONNECT_TIMEOUT"), int32_t(ZMQ_CONNECT_TIMEOUT))
|
|
|
|
.Const(_SC("TCP_MAXRT"), int32_t(ZMQ_TCP_MAXRT))
|
|
|
|
.Const(_SC("THREAD_SAFE"), int32_t(ZMQ_THREAD_SAFE))
|
|
|
|
.Const(_SC("MULTICAST_MAXTPDU"), int32_t(ZMQ_MULTICAST_MAXTPDU))
|
|
|
|
.Const(_SC("VMCI_BUFFER_SIZE"), int32_t(ZMQ_VMCI_BUFFER_SIZE))
|
|
|
|
.Const(_SC("VMCI_BUFFER_MIN_SIZE"), int32_t(ZMQ_VMCI_BUFFER_MIN_SIZE))
|
|
|
|
.Const(_SC("VMCI_BUFFER_MAX_SIZE"), int32_t(ZMQ_VMCI_BUFFER_MAX_SIZE))
|
|
|
|
.Const(_SC("VMCI_CONNECT_TIMEOUT"), int32_t(ZMQ_VMCI_CONNECT_TIMEOUT))
|
|
|
|
.Const(_SC("USE_FD"), int32_t(ZMQ_USE_FD))
|
|
|
|
.Const(_SC("GSSAPI_PRINCIPAL_NAMETYPE"), int32_t(ZMQ_GSSAPI_PRINCIPAL_NAMETYPE))
|
|
|
|
.Const(_SC("GSSAPI_SERVICE_PRINCIPAL_NAMETYPE"), int32_t(ZMQ_GSSAPI_SERVICE_PRINCIPAL_NAMETYPE))
|
|
|
|
.Const(_SC("BINDTODEVICE"), int32_t(ZMQ_BINDTODEVICE))
|
|
|
|
/* Message options */
|
|
|
|
.Const(_SC("MORE"), int32_t(ZMQ_MORE))
|
|
|
|
.Const(_SC("SHARED"), int32_t(ZMQ_SHARED))
|
|
|
|
/* Send/recv options. */
|
|
|
|
.Const(_SC("DONTWAIT"), int32_t(ZMQ_DONTWAIT))
|
|
|
|
.Const(_SC("SNDMORE"), int32_t(ZMQ_SNDMORE))
|
|
|
|
.Const(_SC("NULL"), int32_t(ZMQ_NULL))
|
|
|
|
.Const(_SC("PLAIN"), int32_t(ZMQ_PLAIN))
|
|
|
|
/* Security mechanisms */
|
|
|
|
//.Const(_SC("CURVE"), int32_t(ZMQ_CURVE))
|
|
|
|
//.Const(_SC("GSSAPI"), int32_t(ZMQ_GSSAPI))
|
|
|
|
/* RADIO-DISH protocol */
|
|
|
|
//.Const(_SC("GROUP_MAX_LENGTH"), int32_t(ZMQ_GROUP_MAX_LENGTH))
|
|
|
|
/* GSSAPI principal name types */
|
|
|
|
//.Const(_SC("GSSAPI_NT_HOSTBASED"), int32_t(ZMQ_GSSAPI_NT_HOSTBASED))
|
|
|
|
//.Const(_SC("GSSAPI_NT_USER_NAME"), int32_t(ZMQ_GSSAPI_NT_USER_NAME))
|
|
|
|
//.Const(_SC("GSSAPI_NT_KRB5_PRINCIPAL"), int32_t(ZMQ_GSSAPI_NT_KRB5_PRINCIPAL))
|
|
|
|
/* Socket transport events (TCP, IPC and TIPC only) */
|
|
|
|
//.Const(_SC("EVENT_CONNECTED"), int32_t(ZMQ_EVENT_CONNECTED))
|
|
|
|
//.Const(_SC("EVENT_CONNECT_DELAYED"), int32_t(ZMQ_EVENT_CONNECT_DELAYED))
|
|
|
|
//.Const(_SC("EVENT_CONNECT_RETRIED"), int32_t(ZMQ_EVENT_CONNECT_RETRIED))
|
|
|
|
//.Const(_SC("EVENT_LISTENING"), int32_t(ZMQ_EVENT_LISTENING))
|
|
|
|
//.Const(_SC("EVENT_BIND_FAILED"), int32_t(ZMQ_EVENT_BIND_FAILED))
|
|
|
|
//.Const(_SC("EVENT_ACCEPTED"), int32_t(ZMQ_EVENT_ACCEPTED))
|
|
|
|
//.Const(_SC("EVENT_ACCEPT_FAILED"), int32_t(ZMQ_EVENT_ACCEPT_FAILED))
|
|
|
|
//.Const(_SC("EVENT_CLOSED"), int32_t(ZMQ_EVENT_CLOSED))
|
|
|
|
//.Const(_SC("EVENT_CLOSE_FAILED"), int32_t(ZMQ_EVENT_CLOSE_FAILED))
|
|
|
|
//.Const(_SC("EVENT_DISCONNECTED"), int32_t(ZMQ_EVENT_DISCONNECTED))
|
|
|
|
//.Const(_SC("EVENT_MONITOR_STOPPED"), int32_t(ZMQ_EVENT_MONITOR_STOPPED))
|
|
|
|
//.Const(_SC("EVENT_ALL"), int32_t(ZMQ_EVENT_ALL))
|
|
|
|
//.Const(_SC("EVENT_HANDSHAKE_FAILED_NO_DETAIL"), int32_t(ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL))
|
|
|
|
//.Const(_SC("EVENT_HANDSHAKE_SUCCEEDED"), int32_t(ZMQ_EVENT_HANDSHAKE_SUCCEEDED))
|
|
|
|
//.Const(_SC("EVENT_HANDSHAKE_FAILED_PROTOCOL"), int32_t(ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL))
|
|
|
|
//.Const(_SC("EVENT_HANDSHAKE_FAILED_AUTH"), int32_t(ZMQ_EVENT_HANDSHAKE_FAILED_AUTH))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_UNSPECIFIED"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_UNSPECIFIED))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_UNEXPECTED_COMMAND"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_UNEXPECTED_COMMAND))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_INVALID_SEQUENCE"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_INVALID_SEQUENCE))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_KEY_EXCHANGE"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_KEY_EXCHANGE))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_UNSPECIFIED"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_UNSPECIFIED))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_MESSAGE"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_MESSAGE))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_HELLO"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_HELLO))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_INITIATE"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_INITIATE))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_ERROR"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_ERROR))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_READY"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_READY))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_WELCOME"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_WELCOME))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_INVALID_METADATA"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_INVALID_METADATA))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_CRYPTOGRAPHIC"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_CRYPTOGRAPHIC))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZMTP_MECHANISM_MISMATCH"), int32_t(ZMQ_PROTOCOL_ERROR_ZMTP_MECHANISM_MISMATCH))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZAP_UNSPECIFIED"), int32_t(ZMQ_PROTOCOL_ERROR_ZAP_UNSPECIFIED))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZAP_MALFORMED_REPLY"), int32_t(ZMQ_PROTOCOL_ERROR_ZAP_MALFORMED_REPLY))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZAP_BAD_REQUEST_ID"), int32_t(ZMQ_PROTOCOL_ERROR_ZAP_BAD_REQUEST_ID))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZAP_BAD_VERSION"), int32_t(ZMQ_PROTOCOL_ERROR_ZAP_BAD_VERSION))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZAP_INVALID_STATUS_CODE"), int32_t(ZMQ_PROTOCOL_ERROR_ZAP_INVALID_STATUS_CODE))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_ZAP_INVALID_METADATA"), int32_t(ZMQ_PROTOCOL_ERROR_ZAP_INVALID_METADATA))
|
|
|
|
//.Const(_SC("PROTOCOL_ERROR_WS_UNSPECIFIED"), int32_t(ZMQ_PROTOCOL_ERROR_WS_UNSPECIFIED))
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // Namespace:: SqMod
|