From aebff623f36efddc0de7a3192832b61802f8cec8 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Wed, 23 Dec 2009 19:37:56 +0100 Subject: ZMQII-28: Bidirectional introduction on TCP connection establishment --- src/zmq_listener_init.cpp | 137 ---------------------------------------------- 1 file changed, 137 deletions(-) delete mode 100644 src/zmq_listener_init.cpp (limited to 'src/zmq_listener_init.cpp') 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 . -*/ - -#include - -#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 (); -} -- cgit v1.2.3