diff options
-rw-r--r-- | src/session.cpp | 16 | ||||
-rw-r--r-- | src/session.hpp | 14 | ||||
-rw-r--r-- | src/zmq_init.cpp | 7 |
3 files changed, 21 insertions, 16 deletions
diff --git a/src/session.cpp b/src/session.cpp index 07971e1..c92fb0c 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -42,23 +42,23 @@ zmq::session_t::session_t (object_t *parent_, socket_base_t *owner_, } zmq::session_t::session_t (object_t *parent_, socket_base_t *owner_, - const options_t &options_, const char *name_) : + const options_t &options_, unsigned char peer_identity_size_, + unsigned char *peer_identity_) : owned_t (parent_, owner_), in_pipe (NULL), active (true), out_pipe (NULL), engine (NULL), + ordinal (0), options (options_) { - if (name_) { + if (peer_identity_size_) { type = named; - name = name_; - ordinal = 0; + peer_identity.assign ((char*) peer_identity_, peer_identity_size_); } else { type = transient; // TODO: Generate unique name here. - ordinal = 0; } } @@ -169,8 +169,8 @@ void zmq::session_t::revive (reader_t *pipe_) void zmq::session_t::process_plug () { // Register the session with the socket. - if (!name.empty ()) { - bool ok = owner->register_session (name.c_str (), this); + if (!peer_identity.empty ()) { + bool ok = owner->register_session (peer_identity.c_str (), this); // There's already a session with the specified identity. // We should syslog it and drop the session. TODO @@ -213,7 +213,7 @@ void zmq::session_t::process_unplug () if (type == unnamed) owner->unregister_session (ordinal); else if (type == named) - owner->unregister_session (name.c_str ()); + owner->unregister_session (peer_identity.c_str ()); // Ask associated pipes to terminate. if (in_pipe) { diff --git a/src/session.hpp b/src/session.hpp index 2c6b462..9f8d5a8 100644 --- a/src/session.hpp +++ b/src/session.hpp @@ -41,7 +41,8 @@ namespace zmq // Creates named session. If name is NULL, transient session with // auto-generated name is created. session_t (object_t *parent_, socket_base_t *owner_, - const options_t &options_, const char *name_); + const options_t &options_, unsigned char peer_identity_size_, + unsigned char *peer_identity_); // i_inout interface implementation. bool read (::zmq_msg_t *msg_); @@ -86,12 +87,15 @@ namespace zmq unnamed } type; - // Ordinal of the session (if any). + // Session is identified by ordinal in the case when it was created + // before connection to the peer was established and thus we are + // unaware of peer's identity. uint64_t ordinal; - // The name of the session. One that is used to register it with - // socket-level repository of sessions. - std::string name; + // Identity of the peer. If the peer is anonymous, unique name is + // generated instead. Peer identity (or the generated name) is used + // register the session with socket-level repository of sessions. + std::string peer_identity; // Inherited socket options. options_t options; diff --git a/src/zmq_init.cpp b/src/zmq_init.cpp index 6baa88f..b853a64 100644 --- a/src/zmq_init.cpp +++ b/src/zmq_init.cpp @@ -168,7 +168,8 @@ void zmq::zmq_init_t::finalise () if (!session) { session = new (std::nothrow) session_t ( choose_io_thread (options.affinity), owner, options, - peer_identity.c_str ()); + (unsigned char) peer_identity.size (), + (unsigned char*) peer_identity.c_str ()); zmq_assert (session); send_plug (session); send_own (owner, session); @@ -182,7 +183,7 @@ void zmq::zmq_init_t::finalise () // transient session. else { session = new (std::nothrow) session_t ( - choose_io_thread (options.affinity), owner, options, NULL); + choose_io_thread (options.affinity), owner, options, 0, NULL); zmq_assert (session); send_plug (session); send_own (owner, session); @@ -191,7 +192,7 @@ void zmq::zmq_init_t::finalise () session->inc_seqnum (); } - // No need to increment seqnum as it was laready incremented above. + // No need to increment seqnum as it was already incremented above. send_attach (session, engine, (unsigned char) peer_identity.size (), (unsigned char*) peer_identity.data (), false); |