summaryrefslogtreecommitdiff
path: root/src/zmq_listener_init.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-12-23 19:37:56 +0100
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-12-23 19:37:56 +0100
commitaebff623f36efddc0de7a3192832b61802f8cec8 (patch)
treefd3c88417309994b72b5a33f152ba4b028930fa9 /src/zmq_listener_init.cpp
parentb3bd4c15fe869de4f5c530ecc5942968677a85c3 (diff)
ZMQII-28: Bidirectional introduction on TCP connection establishment
Diffstat (limited to 'src/zmq_listener_init.cpp')
-rw-r--r--src/zmq_listener_init.cpp137
1 files changed, 0 insertions, 137 deletions
diff --git a/src/zmq_listener_init.cpp b/src/zmq_listener_init.cpp
deleted file mode 100644
index f7b3001..0000000
--- a/src/zmq_listener_init.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- Copyright (c) 2007-2009 FastMQ Inc.
-
- This file is part of 0MQ.
-
- 0MQ is free software; you can redistribute it and/or modify it under
- the terms of the Lesser GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- 0MQ is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- Lesser GNU General Public License for more details.
-
- You should have received a copy of the Lesser GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <new>
-
-#include "zmq_listener_init.hpp"
-#include "io_thread.hpp"
-#include "session.hpp"
-#include "err.hpp"
-
-zmq::zmq_listener_init_t::zmq_listener_init_t (io_thread_t *parent_,
- socket_base_t *owner_, fd_t fd_, const options_t &options_) :
- owned_t (parent_, owner_),
- options (options_),
- has_peer_identity (false)
-{
- // Create associated engine object.
- engine = new (std::nothrow) zmq_engine_t (parent_, fd_, options,
- false, NULL);
- zmq_assert (engine);
-}
-
-zmq::zmq_listener_init_t::~zmq_listener_init_t ()
-{
- if (engine)
- delete engine;
-}
-
-bool zmq::zmq_listener_init_t::read (::zmq_msg_t *msg_)
-{
- return false;
-}
-
-bool zmq::zmq_listener_init_t::write (::zmq_msg_t *msg_)
-{
- // Once we've got peer's identity we aren't interested in subsequent
- // messages.
- if (has_peer_identity)
- return false;
-
- // Retreieve the remote identity. We'll use it as a local session name.
- has_peer_identity = true;
- peer_identity.assign ((const char*) zmq_msg_data (msg_),
- zmq_msg_size (msg_));
-
- return true;
-}
-
-void zmq::zmq_listener_init_t::flush ()
-{
- if (!has_peer_identity)
- return;
-
- // Initialisation is done. Disconnect the engine from the init object.
- engine->unplug ();
-
- // Have a look whether the session already exists. If it does, attach it
- // to the engine. If it doesn't create it first.
- session_t *session = NULL;
- if (!peer_identity.empty ())
- session = owner->find_session (peer_identity.c_str ());
- if (!session) {
- io_thread_t *io_thread = choose_io_thread (options.affinity);
- session = new (std::nothrow) session_t (io_thread, owner,
- peer_identity.c_str (), options, false);
- zmq_assert (session);
- send_plug (session);
- send_own (owner, session);
-
- // Reserve a sequence number for following 'attach' command.
- session->inc_seqnum ();
- }
-
- // No need to increment seqnum as it was laready incremented above.
- send_attach (session, engine, false);
-
- engine = NULL;
-
- // Destroy the init object.
- term ();
-}
-
-void zmq::zmq_listener_init_t::detach (owned_t *reconnecter_)
-{
- // On the listening side of the connection we are never reconnecting.
- zmq_assert (reconnecter_ == NULL);
-
- // This function is called by engine when disconnection occurs.
- // The engine will destroy itself, so we just drop the pointer here and
- // start termination of the init object.
- engine = NULL;
- term ();
-}
-
-zmq::io_thread_t *zmq::zmq_listener_init_t::get_io_thread ()
-{
- return choose_io_thread (options.affinity);
-}
-
-class zmq::socket_base_t *zmq::zmq_listener_init_t::get_owner ()
-{
- return owner;
-}
-
-const char *zmq::zmq_listener_init_t::get_session_name ()
-{
- zmq_assert (false);
- return NULL;
-}
-
-void zmq::zmq_listener_init_t::process_plug ()
-{
- zmq_assert (engine);
- engine->plug (this);
-}
-
-void zmq::zmq_listener_init_t::process_unplug ()
-{
- if (engine)
- engine->unplug ();
-}