7 #if defined ZMQ_HAVE_TIPC
14 zmq::tipc_address_t::tipc_address_t ()
20 zmq::tipc_address_t::tipc_address_t (
const sockaddr *sa_, socklen_t sa_len_)
25 if (sa_->sa_family == AF_TIPC)
26 memcpy (&
address, sa_, sa_len_);
31 void zmq::tipc_address_t::set_random ()
35 bool zmq::tipc_address_t::is_random ()
const
39 bool zmq::tipc_address_t::is_service ()
const
41 if (
address.addrtype == TIPC_ADDR_ID)
46 int zmq::tipc_address_t::resolve (
const char *
name_)
48 unsigned int type = 0;
49 unsigned int lower = 0;
50 unsigned int upper = 0;
52 unsigned int z = 1, c = 0,
n = 0;
58 if (strncmp (
name_,
"<*>", 3) == 0) {
61 address.addrtype = TIPC_ADDR_ID;
68 res = sscanf (
name_,
"{%u,%u,%u}", &
type, &lower, &upper);
71 if (sscanf (
domain,
"@%u.%u.%u%c", &
z, &c, &
n, &eof) != 3)
75 if (
type < TIPC_RESERVED_TYPES || upper < lower)
78 address.addrtype = TIPC_ADDR_NAMESEQ;
80 address.addr.nameseq.lower = lower;
81 address.addr.nameseq.upper = upper;
82 address.scope = TIPC_ZONE_SCOPE;
85 if (res == 2 &&
type > TIPC_RESERVED_TYPES) {
87 address.addrtype = TIPC_ADDR_NAME;
89 address.addr.name.name.instance = lower;
90 address.addr.name.domain = tipc_addr (
z, c,
n);
93 }
else if (res == 0) {
94 res = sscanf (
name_,
"<%u.%u.%u:%u>", &
z, &c, &
n, &
ref);
97 address.addrtype = TIPC_ADDR_ID;
98 address.addr.id.node = tipc_addr (
z, c,
n);
107 int zmq::tipc_address_t::to_string (
std::string &addr_)
const
109 if (
address.family != AF_TIPC) {
114 if (
address.addrtype == TIPC_ADDR_NAMESEQ
115 ||
address.addrtype == TIPC_ADDR_NAME) {
117 <<
"{" <<
address.addr.nameseq.type;
118 s <<
", " <<
address.addr.nameseq.lower;
119 s <<
", " <<
address.addr.nameseq.upper <<
"}";
121 }
else if (
address.addrtype == TIPC_ADDR_ID || is_random ()) {
123 <<
"<" << tipc_zone (
address.addr.id.node);
124 s <<
"." << tipc_cluster (
address.addr.id.node);
125 s <<
"." << tipc_node (
address.addr.id.node);
126 s <<
":" <<
address.addr.id.ref <<
">";
135 const sockaddr *zmq::tipc_address_t::addr ()
const
140 socklen_t zmq::tipc_address_t::addrlen ()
const
142 return static_cast<socklen_t
> (
sizeof address);