summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/session.cpp16
-rw-r--r--src/session.hpp14
-rw-r--r--src/zmq_init.cpp7
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);