Skip to content

Commit

Permalink
Merge pull request #3847 from JSYoo5B/protocol-literals-refactor
Browse files Browse the repository at this point in the history
Refactor protocol literals into constants
  • Loading branch information
bluca authored Mar 14, 2020
2 parents 0c7ee43 + 38fd1fd commit bb9135d
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 16 deletions.
7 changes: 7 additions & 0 deletions src/address.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ namespace protocol_name
static const char inproc[] = "inproc";
static const char tcp[] = "tcp";
static const char udp[] = "udp";
#ifdef ZMQ_HAVE_OPENPGM
static const char pgm[] = "pgm";
static const char epgm[] = "epgm";
#endif
#ifdef ZMQ_HAVE_NORM
static const char norm[] = "norm";
#endif
#ifdef ZMQ_HAVE_WS
static const char ws[] = "ws";
#endif
Expand Down
18 changes: 12 additions & 6 deletions src/session_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -534,8 +534,14 @@ void zmq::session_base_t::reconnect ()
{
// For delayed connect situations, terminate the pipe
// and reestablish later on
if (_pipe && options.immediate == 1 && _addr->protocol != "pgm"
&& _addr->protocol != "epgm" && _addr->protocol != "norm"
if (_pipe && options.immediate == 1
#ifdef ZMQ_HAVE_OPENPGM
&& _addr->protocol != protocol_name::pgm
&& _addr->protocol != protocol_name::epgm
#endif
#ifdef ZMQ_HAVE_NORM
&& _addr->protocol != protocol_name::norm
#endif
&& _addr->protocol != protocol_name::udp) {
_pipe->hiccup ();
_pipe->terminate (false);
Expand Down Expand Up @@ -604,13 +610,13 @@ zmq::session_base_t::start_connecting_entry_t
start_connecting_entry_t (protocol_name::udp,
&zmq::session_base_t::start_connecting_udp),
#if defined ZMQ_HAVE_OPENPGM
start_connecting_entry_t ("pgm",
start_connecting_entry_t (protocol_name::pgm,
&zmq::session_base_t::start_connecting_pgm),
start_connecting_entry_t ("epgm",
start_connecting_entry_t (protocol_name::epgm,
&zmq::session_base_t::start_connecting_pgm),
#endif
#if defined ZMQ_HAVE_NORM
start_connecting_entry_t ("norm",
start_connecting_entry_t (protocol_name::norm,
&zmq::session_base_t::start_connecting_norm),
#endif
};
Expand Down Expand Up @@ -724,7 +730,7 @@ void zmq::session_base_t::start_connecting_pgm (io_thread_t *io_thread_)
|| options.type == ZMQ_SUB || options.type == ZMQ_XSUB);

// For EPGM transport with UDP encapsulation of PGM is used.
bool const udp_encapsulation = _addr->protocol == "epgm";
bool const udp_encapsulation = _addr->protocol == protocol_name::epgm;

// At this point we'll create message pipes to the session straight
// away. There's no point in delaying it as no concept of 'connect'
Expand Down
43 changes: 35 additions & 8 deletions src/socket_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -347,15 +347,15 @@ int zmq::socket_base_t::check_protocol (const std::string &protocol_) const
#endif
#if defined ZMQ_HAVE_OPENPGM
// pgm/epgm transports only available if 0MQ is compiled with OpenPGM.
&& protocol_ != "pgm"
&& protocol_ != "epgm"
&& protocol_ != protocol_name::pgm
&& protocol_ != protocol_name::epgm
#endif
#if defined ZMQ_HAVE_TIPC
// TIPC transport is only available on Linux.
&& protocol_ != protocol_name::tipc
#endif
#if defined ZMQ_HAVE_NORM
&& protocol_ != "norm"
&& protocol_ != protocol_name::norm
#endif
#if defined ZMQ_HAVE_VMCI
&& protocol_ != protocol_name::vmci
Expand All @@ -369,7 +369,14 @@ int zmq::socket_base_t::check_protocol (const std::string &protocol_) const
// Specifically, multicast protocols can't be combined with
// bi-directional messaging patterns (socket types).
#if defined ZMQ_HAVE_OPENPGM || defined ZMQ_HAVE_NORM
if ((protocol_ == "pgm" || protocol_ == "epgm" || protocol_ == "norm")
#if defined ZMQ_HAVE_OPENPGM && defined ZMQ_HAVE_NORM
if ((protocol_ == protocol_name::pgm || protocol_ == protocol_name::epgm
|| protocol_ == protocol_name::norm)
#elif defined ZMQ_HAVE_OPENPGM
if ((protocol_ == protocol_name::pgm || protocol_ == protocol_name::epgm)
#else // defined ZMQ_HAVE_NORM
if (protocol_ == protocol_name::norm
#endif
&& options.type != ZMQ_PUB && options.type != ZMQ_SUB
&& options.type != ZMQ_XPUB && options.type != ZMQ_XSUB) {
errno = ENOCOMPATPROTO;
Expand Down Expand Up @@ -546,14 +553,23 @@ int zmq::socket_base_t::bind (const char *endpoint_uri_)
return rc;
}

if (protocol == "pgm" || protocol == "epgm" || protocol == "norm") {
#if defined ZMQ_HAVE_OPENPGM || defined ZMQ_HAVE_NORM
#if defined ZMQ_HAVE_OPENPGM && defined ZMQ_HAVE_NORM
if (protocol == protocol_name::pgm || protocol == protocol_name::epgm
|| protocol == protocol_name::norm) {
#elif defined ZMQ_HAVE_OPENPGM
if (protocol == protocol_name::pgm || protocol == protocol_name::epgm) {
#else // defined ZMQ_HAVE_NORM
if (protocol == protocol_name::norm) {
#endif
// For convenience's sake, bind can be used interchangeable with
// connect for PGM, EPGM, NORM transports.
rc = connect (endpoint_uri_);
if (rc != -1)
options.connected = true;
return rc;
}
#endif

if (protocol == protocol_name::udp) {
if (!(options.type == ZMQ_DGRAM || options.type == ZMQ_DISH)) {
Expand Down Expand Up @@ -968,7 +984,7 @@ int zmq::socket_base_t::connect_internal (const char *endpoint_uri_)
// TBD - Should we check address for ZMQ_HAVE_NORM???

#ifdef ZMQ_HAVE_OPENPGM
if (protocol == "pgm" || protocol == "epgm") {
if (protocol == protocol_name::pgm || protocol == protocol_name::epgm) {
struct pgm_addrinfo_t *res = NULL;
uint16_t port_number = 0;
int rc =
Expand Down Expand Up @@ -1021,9 +1037,20 @@ int zmq::socket_base_t::connect_internal (const char *endpoint_uri_)

// PGM does not support subscription forwarding; ask for all data to be
// sent to this pipe. (same for NORM, currently?)
const bool subscribe_to_all = protocol == "pgm" || protocol == "epgm"
|| protocol == "norm"
#if defined ZMQ_HAVE_OPENPGM && defined ZMQ_HAVE_NORM
const bool subscribe_to_all =
protocol == protocol_name::pgm || protocol == protocol_name::epgm
|| protocol == protocol_name::norm || protocol == protocol_name::udp;
#elif defined ZMQ_HAVE_OPENPGM
const bool subscribe_to_all = protocol == protocol_name::pgm
|| protocol == protocol_name::epgm
|| protocol == protocol_name::udp;
#elif defined ZMQ_HAVE_NORM
const bool subscribe_to_all =
protocol == protocol_name::norm || protocol == protocol_name::udp;
#else
const bool subscribe_to_all = protocol == protocol_name::udp;
#endif
pipe_t *newpipe = NULL;

if (options.immediate != 1 || subscribe_to_all) {
Expand Down
4 changes: 2 additions & 2 deletions src/zmq.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1477,15 +1477,15 @@ int zmq_has (const char *capability_)
return true;
#endif
#if defined(ZMQ_HAVE_OPENPGM)
if (strcmp (capability_, "pgm") == 0)
if (strcmp (capability_, zmq::protocol_name::pgm) == 0)
return true;
#endif
#if defined(ZMQ_HAVE_TIPC)
if (strcmp (capability_, zmq::protocol_name::tipc) == 0)
return true;
#endif
#if defined(ZMQ_HAVE_NORM)
if (strcmp (capability_, "norm") == 0)
if (strcmp (capability_, zmq::protocol_name::norm) == 0)
return true;
#endif
#if defined(ZMQ_HAVE_CURVE)
Expand Down

0 comments on commit bb9135d

Please sign in to comment.