| /* |
| Copyright (c) 2013 Evan Wies <evan@neomantra.net> |
| Copyright (c) 2013 GoPivotal, Inc. All rights reserved. |
| |
| Permission is hereby granted, free of charge, to any person obtaining a copy |
| of this software and associated documentation files (the "Software"), |
| to deal in the Software without restriction, including without limitation |
| the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| and/or sell copies of the Software, and to permit persons to whom |
| the Software is furnished to do so, subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be included |
| in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
| IN THE SOFTWARE. |
| */ |
| |
| #include "../nn.h" |
| |
| #include "../inproc.h" |
| #include "../ipc.h" |
| #include "../tcp.h" |
| |
| #include "../pair.h" |
| #include "../pubsub.h" |
| #include "../reqrep.h" |
| #include "../pipeline.h" |
| #include "../survey.h" |
| #include "../bus.h" |
| |
| #include <string.h> |
| |
| static const struct nn_symbol_properties sym_value_names [] = { |
| {NN_NS_NAMESPACE, "NN_NS_NAMESPACE", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_VERSION, "NN_NS_VERSION", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_DOMAIN, "NN_NS_DOMAIN", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_TRANSPORT, "NN_NS_TRANSPORT", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_PROTOCOL, "NN_NS_PROTOCOL", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_OPTION_LEVEL, "NN_NS_OPTION_LEVEL", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_SOCKET_OPTION, "NN_NS_SOCKET_OPTION", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_TRANSPORT_OPTION, "NN_NS_TRANSPORT_OPTION", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_OPTION_TYPE, "NN_NS_OPTION_TYPE", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_OPTION_UNIT, "NN_NS_OPTION_UNIT", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_FLAG, "NN_NS_FLAG", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_ERROR, "NN_NS_ERROR", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_NS_LIMIT, "NN_NS_LIMIT", NN_NS_NAMESPACE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_TYPE_NONE, "NN_TYPE_NONE", NN_NS_OPTION_TYPE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_TYPE_INT, "NN_TYPE_INT", NN_NS_OPTION_TYPE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_TYPE_STR, "NN_TYPE_STR", NN_NS_OPTION_TYPE, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_UNIT_NONE, "NN_UNIT_NONE", NN_NS_OPTION_UNIT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_UNIT_BYTES, "NN_UNIT_BYTES", NN_NS_OPTION_UNIT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_UNIT_MILLISECONDS, "NN_UNIT_MILLISECONDS", NN_NS_OPTION_UNIT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_UNIT_PRIORITY, "NN_UNIT_PRIORITY", NN_NS_OPTION_UNIT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_UNIT_BOOLEAN, "NN_UNIT_BOOLEAN", NN_NS_OPTION_UNIT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_VERSION_CURRENT, "NN_VERSION_CURRENT", NN_NS_VERSION, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_VERSION_REVISION, "NN_VERSION_REVISION", NN_NS_VERSION, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_VERSION_AGE, "NN_VERSION_AGE", NN_NS_VERSION, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {AF_SP, "AF_SP", NN_NS_DOMAIN, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {AF_SP_RAW, "AF_SP_RAW", NN_NS_DOMAIN, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_INPROC, "NN_INPROC", NN_NS_TRANSPORT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_IPC, "NN_IPC", NN_NS_TRANSPORT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_TCP, "NN_TCP", NN_NS_TRANSPORT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_PAIR, "NN_PAIR", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_PUB, "NN_PUB", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_SUB, "NN_SUB", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_REP, "NN_REP", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_REQ, "NN_REQ", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_PUSH, "NN_PUSH", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_PULL, "NN_PULL", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_SURVEYOR, "NN_SURVEYOR", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_RESPONDENT, "NN_RESPONDENT", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| {NN_BUS, "NN_BUS", NN_NS_PROTOCOL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_SOCKADDR_MAX, "NN_SOCKADDR_MAX", NN_NS_LIMIT, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_SOL_SOCKET, "NN_SOL_SOCKET", NN_NS_OPTION_LEVEL, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {NN_LINGER, "NN_LINGER", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_SNDBUF, "NN_SNDBUF", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_BYTES}, |
| {NN_RCVBUF, "NN_RCVBUF", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_BYTES}, |
| {NN_SNDTIMEO, "NN_SNDTIMEO", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_RCVTIMEO, "NN_RCVTIMEO", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_RECONNECT_IVL, "NN_RECONNECT_IVL", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_RECONNECT_IVL_MAX, "NN_RECONNECT_IVL_MAX", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_SNDPRIO, "NN_SNDPRIO", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_PRIORITY}, |
| {NN_SNDFD, "NN_SNDFD", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_NONE}, |
| {NN_RCVFD, "NN_RCVFD", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_NONE}, |
| {NN_DOMAIN, "NN_DOMAIN", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_NONE}, |
| {NN_PROTOCOL, "NN_PROTOCOL", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_NONE}, |
| {NN_IPV4ONLY, "NN_IPV4ONLY", NN_NS_SOCKET_OPTION, |
| NN_TYPE_INT, NN_UNIT_BOOLEAN}, |
| {NN_SOCKET_NAME, "NN_SOCKET_NAME", NN_NS_SOCKET_OPTION, |
| NN_TYPE_STR, NN_UNIT_NONE}, |
| |
| {NN_SUB_SUBSCRIBE, "NN_SUB_SUBSCRIBE", NN_NS_TRANSPORT_OPTION, |
| NN_TYPE_STR, NN_UNIT_NONE}, |
| {NN_SUB_UNSUBSCRIBE, "NN_SUB_UNSUBSCRIBE", NN_NS_TRANSPORT_OPTION, |
| NN_TYPE_STR, NN_UNIT_NONE}, |
| {NN_REQ_RESEND_IVL, "NN_REQ_RESEND_IVL", NN_NS_TRANSPORT_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_SURVEYOR_DEADLINE, "NN_SURVEYOR_DEADLINE", NN_NS_TRANSPORT_OPTION, |
| NN_TYPE_INT, NN_UNIT_MILLISECONDS}, |
| {NN_TCP_NODELAY, "NN_TCP_NODELAY", NN_NS_TRANSPORT_OPTION, |
| NN_TYPE_INT, NN_UNIT_BOOLEAN}, |
| |
| {NN_DONTWAIT, "NN_DONTWAIT", NN_NS_FLAG, |
| NN_TYPE_NONE, NN_UNIT_NONE}, |
| |
| {EADDRINUSE, "EADDRINUSE", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EADDRNOTAVAIL, "EADDRNOTAVAIL", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EAFNOSUPPORT, "EAFNOSUPPORT", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EAGAIN, "EAGAIN", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EBADF, "EBADF", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ECONNREFUSED, "ECONNREFUSED", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EFAULT, "EFAULT", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EFSM, "EFSM", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EINPROGRESS, "EINPROGRESS", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EINTR, "EINTR", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EINVAL, "EINVAL", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EMFILE, "EMFILE", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENAMETOOLONG, "ENAMETOOLONG", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENETDOWN, "ENETDOWN", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENOBUFS, "ENOBUFS", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENODEV, "ENODEV", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENOMEM, "ENOMEM", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENOPROTOOPT, "ENOPROTOOPT", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENOTSOCK, "ENOTSOCK", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENOTSUP, "ENOTSUP", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EPROTO, "EPROTO", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EPROTONOSUPPORT, "EPROTONOSUPPORT", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ETERM, "ETERM", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ETIMEDOUT, "ETIMEDOUT", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EACCES, "EACCES" , NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ECONNABORTED, "ECONNABORTED", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ECONNRESET, "ECONNRESET", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EHOSTUNREACH, "EHOSTUNREACH", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {EMSGSIZE, "EMSGSIZE", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENETRESET, "ENETRESET", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENETUNREACH, "ENETUNREACH", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| {ENOTCONN, "ENOTCONN", NN_NS_ERROR, NN_TYPE_NONE, NN_UNIT_NONE}, |
| }; |
| |
| const int SYM_VALUE_NAMES_LEN = (sizeof (sym_value_names) / |
| sizeof (sym_value_names [0])); |
| |
| |
| const char *nn_symbol (int i, int *value) |
| { |
| const struct nn_symbol_properties *svn; |
| if (i < 0 || i >= SYM_VALUE_NAMES_LEN) { |
| errno = EINVAL; |
| return NULL; |
| } |
| |
| svn = &sym_value_names [i]; |
| if (value) |
| *value = svn->value; |
| return svn->name; |
| } |
| |
| int nn_symbol_info (int i, struct nn_symbol_properties *buf, int buflen) |
| { |
| if (i < 0 || i >= SYM_VALUE_NAMES_LEN) { |
| return 0; |
| } |
| if (buflen > (int)sizeof (struct nn_symbol_properties)) { |
| buflen = (int)sizeof (struct nn_symbol_properties); |
| } |
| memcpy(buf, &sym_value_names [i], buflen); |
| return buflen; |
| } |
| |