summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/tao/Connection_Handler.h5
-rw-r--r--TAO/tao/Connection_Handler.inl9
-rw-r--r--TAO/tao/Default_Protocols_Hooks.cpp27
-rw-r--r--TAO/tao/Default_Protocols_Hooks.h17
-rw-r--r--TAO/tao/IIOP_Connection_Handler.cpp90
-rw-r--r--TAO/tao/IIOP_Connection_Handler.h21
-rw-r--r--TAO/tao/IIOP_Transport.cpp218
-rw-r--r--TAO/tao/IIOP_Transport.h9
8 files changed, 318 insertions, 78 deletions
diff --git a/TAO/tao/Connection_Handler.h b/TAO/tao/Connection_Handler.h
index 8a928181f42..9cd265157fe 100644
--- a/TAO/tao/Connection_Handler.h
+++ b/TAO/tao/Connection_Handler.h
@@ -1,3 +1,4 @@
+
// -*- C++ -*-
//=============================================================================
@@ -74,6 +75,10 @@ public:
/// reference to this object can call the event handler methods.
virtual int handle_input (ACE_HANDLE fd) = 0;
+ void update_protocol_properties (int send_buffer_size,
+ int recv_buffer_size,
+ int no_delay,
+ int enable_network_priority);
protected:
/// Return our TAO_ORB_Core pointer
diff --git a/TAO/tao/Connection_Handler.inl b/TAO/tao/Connection_Handler.inl
index 0b8117b0b9c..8a6590ec1d4 100644
--- a/TAO/tao/Connection_Handler.inl
+++ b/TAO/tao/Connection_Handler.inl
@@ -48,3 +48,12 @@ TAO_Connection_Handler::pending_upcalls (void) const
{
return this->pending_upcalls_;
}
+
+ACE_INLINE void
+TAO_Connection_Handler::update_protocol_properties (int /*send_buffer_size*/,
+ int /*recv_buffer_size*/,
+ int /*no_delay*/,
+ int /*enable_network_priority*/)
+{
+}
+
diff --git a/TAO/tao/Default_Protocols_Hooks.cpp b/TAO/tao/Default_Protocols_Hooks.cpp
index 0ef3d79a2e6..d38c2f5ba8e 100644
--- a/TAO/tao/Default_Protocols_Hooks.cpp
+++ b/TAO/tao/Default_Protocols_Hooks.cpp
@@ -1,8 +1,10 @@
+
// $Id$
#include "Default_Protocols_Hooks.h"
#include "PolicyC.h"
#include "ace/Dynamic_Service.h"
+#include "tao/Connection_Handler.h"
#if !defined (__ACE_INLINE__)
# include "Default_Protocols_Hooks.i"
@@ -12,6 +14,7 @@ ACE_RCSID (tao,
Default_Protocols_Hooks,
"$Id$")
+
/// destructor
TAO_Default_Protocols_Hooks::~TAO_Default_Protocols_Hooks (void)
{
@@ -27,6 +30,7 @@ int
TAO_Default_Protocols_Hooks::call_client_protocols_hook (int &,
int &,
int &,
+ int &,
const char *)
{
return 0;
@@ -36,6 +40,7 @@ int
TAO_Default_Protocols_Hooks::call_server_protocols_hook (int &,
int &,
int &,
+ int &,
const char *)
{
return 0;
@@ -122,6 +127,28 @@ TAO_Default_Protocols_Hooks::rt_service_context (TAO_Stub *,
{
}
+int
+TAO_Default_Protocols_Hooks::update_client_protocol_properties (TAO_Stub *,
+ TAO_Connection_Handler *,
+ const char *)
+{
+ return 0;
+}
+
+int
+TAO_Default_Protocols_Hooks::update_server_protocol_properties (CORBA::Policy *policy,
+ TAO_Connection_Handler *,
+ const char *)
+{
+ return 0;
+}
+
+CORBA::Long
+TAO_Default_Protocols_Hooks::get_dscp_codepoint (void)
+{
+ return 0;
+}
+
// ****************************************************************
diff --git a/TAO/tao/Default_Protocols_Hooks.h b/TAO/tao/Default_Protocols_Hooks.h
index a215671c425..5e82fee6d79 100644
--- a/TAO/tao/Default_Protocols_Hooks.h
+++ b/TAO/tao/Default_Protocols_Hooks.h
@@ -1,3 +1,4 @@
+
// -*- C++ -*-
// ===================================================================
@@ -12,16 +13,20 @@
#ifndef TAO_DEFAULT_PROTOCOLS_HOOKS_H
#define TAO_DEFAULT_PROTOCOLS_HOOKS_H
+
#include "ace/pre.h"
#include "Protocols_Hooks.h"
+
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "ace/Service_Config.h"
+class TAO_POA;
+
class TAO_Export TAO_Default_Protocols_Hooks : public TAO_Protocols_Hooks
{
public:
@@ -35,13 +40,25 @@ public:
virtual int call_client_protocols_hook (int &send_buffer_size,
int &recv_buffer_size,
int &no_delay,
+ int &enable_network_priority,
const char *protocol_type);
virtual int call_server_protocols_hook (int &send_buffer_size,
int &recv_buffer_size,
int &no_delay,
+ int &enable_network_priority,
const char *protocol_type);
+ virtual int update_client_protocol_properties (TAO_Stub *stub,
+ TAO_Connection_Handler *connection_handler,
+ const char *protocol_type);
+
+ virtual int update_server_protocol_properties (CORBA::Policy *policy,
+ TAO_Connection_Handler *connection_handler,
+ const char *protocol_type);
+
+ virtual CORBA::Long get_dscp_codepoint (void);
+
virtual void rt_service_context (TAO_Stub *stub,
TAO_Service_Context &service_context,
CORBA::Boolean restart
diff --git a/TAO/tao/IIOP_Connection_Handler.cpp b/TAO/tao/IIOP_Connection_Handler.cpp
index 20a3626ba6c..d7929a03c3c 100644
--- a/TAO/tao/IIOP_Connection_Handler.cpp
+++ b/TAO/tao/IIOP_Connection_Handler.cpp
@@ -1,5 +1,7 @@
+
// $Id$
+
#include "tao/IIOP_Connection_Handler.h"
#include "tao/Timeprobe.h"
#include "tao/debug.h"
@@ -13,6 +15,9 @@
#include "tao/Thread_Lane_Resources.h"
#include "tao/Base_Transport_Property.h"
#include "tao/Resume_Handle.h"
+#include "tao/Protocols_Hooks.h"
+
+
#if !defined (__ACE_INLINE__)
# include "tao/IIOP_Connection_Handler.i"
@@ -25,8 +30,7 @@ ACE_RCSID (tao,
TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler (ACE_Thread_Manager *t)
: TAO_IIOP_SVC_HANDLER (t, 0 , 0),
- TAO_Connection_Handler (0),
- tcp_properties_ (0)
+ TAO_Connection_Handler (0)
{
// This constructor should *never* get called, it is just here to
// make the compiler happy: the default implementation of the
@@ -42,8 +46,8 @@ TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler (TAO_ORB_Core *orb_core
void *arg)
: TAO_IIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0),
TAO_Connection_Handler (orb_core),
- tcp_properties_ (ACE_static_cast
- (TAO_IIOP_Properties *, arg))
+ tcp_properties_ (*(ACE_static_cast
+ (TAO_IIOP_Properties *, arg)))
{
TAO_IIOP_Transport* specific_transport = 0;
ACE_NEW(specific_transport,
@@ -63,15 +67,15 @@ int
TAO_IIOP_Connection_Handler::open (void*)
{
if (this->set_socket_option (this->peer (),
- this->tcp_properties_->send_buffer_size,
- this->tcp_properties_->recv_buffer_size) == -1)
+ this->tcp_properties_.send_buffer_size,
+ this->tcp_properties_.recv_buffer_size) == -1)
return -1;
#if !defined (ACE_LACKS_TCP_NODELAY)
if (this->peer ().set_option (ACE_IPPROTO_TCP,
TCP_NODELAY,
- (void *) &tcp_properties_->no_delay,
+ (void *) &tcp_properties_.no_delay,
sizeof (int)) == -1)
return -1;
#endif /* ! ACE_LACKS_TCP_NODELAY */
@@ -427,6 +431,78 @@ TAO_IIOP_Connection_Handler::handle_input (ACE_HANDLE h)
return retval;
}
+void
+TAO_IIOP_Connection_Handler::update_protocol_properties (int send_buffer_size,
+ int recv_buffer_size,
+ int no_delay,
+ int enable_network_priority)
+{
+ if (TAO_debug_level)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_IIOP_Connection_Handler::update_protocol_properties \n enable_network_priority = %d\n",
+ enable_network_priority));
+
+ if (this->tcp_properties_.send_buffer_size != send_buffer_size)
+ this->tcp_properties_.send_buffer_size = send_buffer_size;
+
+ if (this->tcp_properties_.recv_buffer_size != recv_buffer_size)
+ this->tcp_properties_.recv_buffer_size = recv_buffer_size;
+
+ if (this->tcp_properties_.no_delay != no_delay)
+ this->tcp_properties_.no_delay = no_delay;
+
+ if (this->tcp_properties_.enable_network_priority != enable_network_priority)
+ this->tcp_properties_.enable_network_priority = enable_network_priority;
+
+}
+
+int
+TAO_IIOP_Connection_Handler::enable_network_priority (void)
+{
+ return this->tcp_properties_.enable_network_priority;
+}
+
+int
+TAO_IIOP_Connection_Handler::set_dscp_codepoint (void)
+{
+ int tos;
+ if (this->enable_network_priority ())
+ {
+ TAO_Protocols_Hooks *tph = this->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (tph != 0)
+ {
+ CORBA::Long codepoint =
+ tph->get_dscp_codepoint ();
+
+
+ tos = (int)(codepoint ) << 2;
+ }
+ }
+ else
+ {
+ tos = IPDSFIELD_DSCP_DEFAULT << 2;
+ }
+
+ if (tos != this->dscp_codepoint_)
+ {
+ int ret = this->peer ().set_option(IPPROTO_IP, IP_TOS, (int *)&tos , (int)sizeof(tos));
+
+ if (ret < 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "Failed to set Diffserv codepoint - try running as superuser\n"));
+
+ if(TAO_debug_level)
+ {
+ ACE_DEBUG((LM_DEBUG, "(%N,%l) set tos: ret: %d %x\n", ret, tos));
+ }
+ this->dscp_codepoint_ = tos;
+ }
+
+ return 0;
+}
+
diff --git a/TAO/tao/IIOP_Connection_Handler.h b/TAO/tao/IIOP_Connection_Handler.h
index fbf5d02d2bf..998543e8dd3 100644
--- a/TAO/tao/IIOP_Connection_Handler.h
+++ b/TAO/tao/IIOP_Connection_Handler.h
@@ -42,6 +42,8 @@ class TAO_Pluggable_Messaging;
*
*/
+#define IPDSFIELD_DSCP_DEFAULT 0x00
+
class TAO_Export TAO_IIOP_Properties
{
@@ -49,6 +51,7 @@ public:
int send_buffer_size;
int recv_buffer_size;
int no_delay;
+ int enable_network_priority;
};
@@ -122,6 +125,21 @@ public:
/// Process the <listen_list>
int process_listen_point_list (IIOP::ListenPointList &listen_list);
+ ///Check if network priority needs to be enabled
+ int enable_network_priority (void);
+
+ ///Set the Diff-Serv codepoint if the Policy dicates the setting of Network Priority
+ int set_dscp_codepoint (void);
+
+ int set_dscp_codepoint (int tos);
+
+ ///Update the tcp properties of the hanlder to the most recent
+ ///properties set after the last invocation
+ virtual void update_protocol_properties (int send_buffer_size,
+ int recv_buffer_size,
+ int no_delay,
+ int enable_network_priority);
+
protected:
/// = Event Handler overloads
@@ -139,7 +157,8 @@ protected:
private:
/// TCP configuration for this connection.
- TAO_IIOP_Properties *tcp_properties_;
+ TAO_IIOP_Properties tcp_properties_;
+ int dscp_codepoint_;
};
diff --git a/TAO/tao/IIOP_Transport.cpp b/TAO/tao/IIOP_Transport.cpp
index 1e6aa25e237..d8d5dcd48c5 100644
--- a/TAO/tao/IIOP_Transport.cpp
+++ b/TAO/tao/IIOP_Transport.cpp
@@ -1,3 +1,4 @@
+
// This may look like C, but it's really -*- C++ -*-
// $Id$
@@ -18,19 +19,21 @@
#include "tao/debug.h"
#include "tao/GIOP_Message_Base.h"
#include "tao/GIOP_Message_Lite.h"
+#include "tao/Protocols_Hooks.h"
+#include "tao/Adapter.h"
#if !defined (__ACE_INLINE__)
# include "tao/IIOP_Transport.i"
#endif /* ! __ACE_INLINE__ */
-ACE_RCSID (tao, IIOP_Transport, "$Id$")
+ACE_RCSID (tao, IIOP_Transport, "$Id$")
TAO_IIOP_Transport::TAO_IIOP_Transport (TAO_IIOP_Connection_Handler *handler,
- TAO_ORB_Core *orb_core,
- CORBA::Boolean flag)
+ TAO_ORB_Core *orb_core,
+ CORBA::Boolean flag)
: TAO_Transport (TAO_TAG_IIOP_PROFILE,
- orb_core)
+ orb_core)
, connection_handler_ (handler)
, messaging_object_ (0)
{
@@ -38,17 +41,18 @@ TAO_IIOP_Transport::TAO_IIOP_Transport (TAO_IIOP_Connection_Handler *handler,
{
// Use the lite version of the protocol
ACE_NEW (this->messaging_object_,
- TAO_GIOP_Message_Lite (orb_core));
+ TAO_GIOP_Message_Lite (orb_core));
}
else
{
// Use the normal GIOP object
ACE_NEW (this->messaging_object_,
- TAO_GIOP_Message_Base (orb_core));
+ TAO_GIOP_Message_Base (orb_core));
}
}
TAO_IIOP_Transport::~TAO_IIOP_Transport (void)
+
{
delete this->messaging_object_;
}
@@ -73,11 +77,11 @@ TAO_IIOP_Transport::messaging_object (void)
ssize_t
TAO_IIOP_Transport::send_i (iovec *iov, int iovcnt,
- size_t &bytes_transferred,
- const ACE_Time_Value *max_wait_time)
+ size_t &bytes_transferred,
+ const ACE_Time_Value *max_wait_time)
{
ssize_t retval = this->connection_handler_->peer ().sendv (iov, iovcnt,
- max_wait_time);
+ max_wait_time);
if (retval > 0)
bytes_transferred = retval;
@@ -86,12 +90,12 @@ TAO_IIOP_Transport::send_i (iovec *iov, int iovcnt,
ssize_t
TAO_IIOP_Transport::recv_i (char *buf,
- size_t len,
- const ACE_Time_Value *max_wait_time)
+ size_t len,
+ const ACE_Time_Value *max_wait_time)
{
ssize_t n = this->connection_handler_->peer ().recv (buf,
- len,
- max_wait_time);
+ len,
+ max_wait_time);
// Do not print the error message if it is a timeout, which could
// occur in thread-per-connection.
@@ -100,16 +104,16 @@ TAO_IIOP_Transport::recv_i (char *buf,
errno != ETIME)
{
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) - %p \n"),
- ACE_TEXT ("TAO - read message failure ")
- ACE_TEXT ("recv_i () \n")));
+ ACE_TEXT ("TAO (%P|%t) - %p \n"),
+ ACE_TEXT ("TAO - read message failure ")
+ ACE_TEXT ("recv_i () \n")));
}
// Error handling
if (n == -1)
{
if (errno == EWOULDBLOCK)
- return 0;
+ return 0;
return -1;
@@ -133,8 +137,8 @@ TAO_IIOP_Transport::register_handler_i (void)
if (TAO_debug_level > 4)
{
ACE_DEBUG ((LM_DEBUG,
- "TAO (%P|%t) - IIOP_Transport::register_handler %d\n",
- this->id ()));
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d\n",
+ this->id ()));
}
ACE_Reactor *r = this->orb_core_->reactor ();
@@ -149,7 +153,7 @@ TAO_IIOP_Transport::register_handler_i (void)
// Register the handler with the reactor
return r->register_handler (this->connection_handler_,
- ACE_Event_Handler::READ_MASK);
+ ACE_Event_Handler::READ_MASK);
}
@@ -160,17 +164,43 @@ TAO_IIOP_Transport::send_request (TAO_Stub *stub,
int message_semantics,
ACE_Time_Value *max_wait_time)
{
+ TAO_Protocols_Hooks *tph = this->orb_core_->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ if (tph != 0)
+ {
+ /*
+ int send_buffer_size;
+ int recv_buffer_size;
+ int no_delay;
+ int enable_network_priority;
+ */
+
+
+ const char protocol [] = "iiop";
+ const char *protocol_type = protocol;
+
+ int result =
+ tph->update_client_protocol_properties (stub,
+ this->connection_handler_,
+ protocol_type);
+
+ if (result == -1)
+ return -1;
+
+ }
+
if (this->ws_->sending_request (orb_core,
message_semantics) == -1)
+
return -1;
if (this->send_message (stream,
stub,
message_semantics,
max_wait_time) == -1)
-
return -1;
-
+
return this->idle_after_send ();
}
@@ -180,6 +210,15 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream,
int message_semantics,
ACE_Time_Value *max_wait_time)
{
+
+ if (TAO_debug_level)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_IIOP_Transport::send_message\n enable_network_priority = %d\n",
+ this->connection_handler_->enable_network_priority ()));
+
+ this->connection_handler_->set_dscp_codepoint ();
+
+
// Format the message in the stream first
if (this->messaging_object_->format_message (stream) != 0)
return -1;
@@ -193,10 +232,10 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream,
if (n == -1)
{
if (TAO_debug_level)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO: (%P|%t|%N|%l) closing transport %d after fault %p\n"),
- this->id (),
- ACE_TEXT ("send_message ()\n")));
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO: (%P|%t|%N|%l) closing transport %d after fault %p\n"),
+ this->id (),
+ ACE_TEXT ("send_message ()\n")));
return -1;
}
@@ -204,10 +243,54 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream,
return 1;
}
+/*
+int
+TAO_IIOP_Transport::send_reply (TAO_OutputCDR &stream,
+ TAO_Adapter *poa)
+{
+
+ TAO_Protocols_Hooks *tph = this->orb_core_->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+
+ if (tph != 0)
+ {
+ int send_buffer_size;
+ int recv_buffer_size;
+ int no_delay;
+ int enable_network_priority;
+
+ const char protocol [] = "iiop";
+ const char *protocol_type = protocol;
+
+ int result =
+ tph->get_effective_server_protocol_properties (poa,
+ send_buffer_size,
+ recv_buffer_size,
+ no_delay,
+ enable_network_priority,
+ protocol_type);
+ if (result != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Error in getting the effective protocol properties\n"),
+ -1);
+
+ this->connection_handler_->update_protocol_properties (send_buffer_size,
+ recv_buffer_size,
+ no_delay,
+ enable_network_priority);
+ }
+
+ int result = this->send_message (stream);
+ return result;
+}
+
+ */
+
int
TAO_IIOP_Transport::generate_request_header (TAO_Operation_Details &opdetails,
- TAO_Target_Specification &spec,
- TAO_OutputCDR &msg)
+ TAO_Target_Specification &spec,
+ TAO_OutputCDR &msg)
{
// Check whether we have a Bi Dir IIOP policy set, whether the
// messaging objects are ready to handle bidirectional connections
@@ -221,25 +304,24 @@ TAO_IIOP_Transport::generate_request_header (TAO_Operation_Details &opdetails,
// Set the flag to 0 (i.e., originating side)
this->bidirectional_flag (0);
-
- // Modify the request id if we have BiDirectional client/server
- // setup.
- // @@ Is this needed at all?
- opdetails.modify_request_id (this->bidirectional_flag ());
}
+ // Modify the request id if we have BiDirectional client/server
+ // setup
+ opdetails.modify_request_id (this->bidirectional_flag ());
+
return TAO_Transport::generate_request_header (opdetails,
- spec,
- msg);
+ spec,
+ msg);
}
int
TAO_IIOP_Transport::messaging_init (CORBA::Octet major,
- CORBA::Octet minor)
+ CORBA::Octet minor)
{
this->messaging_object_->init (major,
- minor);
+ minor);
return 1;
}
@@ -280,12 +362,12 @@ TAO_IIOP_Transport::set_bidir_context_info (TAO_Operation_Details &opdetails)
{
// Check whether it is a IIOP acceptor
if ((*acceptor)->tag () == TAO_TAG_IIOP_PROFILE)
- {
- // @@ Why isn't the return value checked!
- // -Ossama
- this->get_listen_point (listen_point_list,
- *acceptor);
- }
+ {
+ // @@ Why isn't the return value checked!
+ // -Ossama
+ this->get_listen_point (listen_point_list,
+ *acceptor);
+ }
}
// We have the ListenPointList at this point. Create a output CDR
@@ -299,7 +381,7 @@ TAO_IIOP_Transport::set_bidir_context_info (TAO_Operation_Details &opdetails)
// Add this info in to the svc_list
opdetails.request_service_context ().set_context (IOP::BI_DIR_IIOP,
- cdr);
+ cdr);
return;
}
@@ -311,7 +393,7 @@ TAO_IIOP_Transport::get_listen_point (
{
TAO_IIOP_Acceptor *iiop_acceptor =
ACE_dynamic_cast (TAO_IIOP_Acceptor *,
- acceptor );
+ acceptor );
// Get the array of endpoints serviced by TAO_IIOP_Acceptor
const ACE_INET_Addr *endpoint_addr =
@@ -328,10 +410,10 @@ TAO_IIOP_Transport::get_listen_point (
== -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("(%P|%t) Could not resolve local ")
- ACE_TEXT ("host address in ")
- ACE_TEXT ("get_listen_point()\n")),
- -1);
+ ACE_TEXT ("(%P|%t) Could not resolve local ")
+ ACE_TEXT ("host address in ")
+ ACE_TEXT ("get_listen_point()\n")),
+ -1);
}
// Note: Looks like there is no point in sending the list of
@@ -341,13 +423,13 @@ TAO_IIOP_Transport::get_listen_point (
// Get the hostname for the local address
if (iiop_acceptor->hostname (this->orb_core_,
- local_addr,
- local_interface.out ()) == -1)
+ local_addr,
+ local_interface.out ()) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("(%P|%t) Could not resolve local host")
- ACE_TEXT (" name \n")),
- -1);
+ ACE_TEXT ("(%P|%t) Could not resolve local host")
+ ACE_TEXT (" name \n")),
+ -1);
}
for (size_t index = 0;
@@ -355,20 +437,20 @@ TAO_IIOP_Transport::get_listen_point (
index++)
{
if (local_addr.get_ip_address()
- == endpoint_addr[index].get_ip_address())
- {
- // Get the count of the number of elements
- CORBA::ULong len = listen_point_list.length ();
-
- // Increase the length by 1
- listen_point_list.length (len + 1);
-
- // We have the connection and the acceptor endpoint on the
- // same interface
- IIOP::ListenPoint &point = listen_point_list[len];
- point.host = CORBA::string_dup (local_interface.in ());
- point.port = endpoint_addr[index].get_port_number ();
- }
+ == endpoint_addr[index].get_ip_address())
+ {
+ // Get the count of the number of elements
+ CORBA::ULong len = listen_point_list.length ();
+
+ // Increase the length by 1
+ listen_point_list.length (len + 1);
+
+ // We have the connection and the acceptor endpoint on the
+ // same interface
+ IIOP::ListenPoint &point = listen_point_list[len];
+ point.host = CORBA::string_dup (local_interface.in ());
+ point.port = endpoint_addr[index].get_port_number ();
+ }
}
return 1;
diff --git a/TAO/tao/IIOP_Transport.h b/TAO/tao/IIOP_Transport.h
index 75b591f72c4..854bc66f68a 100644
--- a/TAO/tao/IIOP_Transport.h
+++ b/TAO/tao/IIOP_Transport.h
@@ -1,3 +1,4 @@
+
// This may look like C, but it's really -*- C++ -*-
// -*- C++ -*-
// ===================================================================
@@ -27,13 +28,13 @@
#include "ace/Svc_Handler.h"
#include "tao/IIOPC.h"
-
// Forward decls.
class TAO_IIOP_Connection_Handler;
class TAO_ORB_Core;
class TAO_Operation_Details;
class TAO_Pluggable_Messaging;
class TAO_Acceptor;
+class TAO_Adapter;
// Service Handler for this transport
typedef ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>
@@ -74,7 +75,6 @@ protected:
//@{
virtual ACE_Event_Handler * event_handler_i (void);
- virtual TAO_Connection_Handler * connection_handler_i (void);
virtual ACE_Event_Handler * invalidate_event_handler_i (void);
/// Access the underlying messaging object
@@ -105,6 +105,9 @@ public:
int message_semantics = TAO_Transport::TAO_TWOWAY_REQUEST,
ACE_Time_Value *max_time_wait = 0);
+ /*virtual int send_reply (TAO_OutputCDR &stream,
+ TAO_Adapter *poa = 0);*/
+
virtual int generate_request_header (TAO_Operation_Details &opdetails,
TAO_Target_Specification &spec,
TAO_OutputCDR &msg);
@@ -114,6 +117,8 @@ public:
virtual int tear_listen_point_list (TAO_InputCDR &cdr);
+ virtual TAO_Connection_Handler * connection_handler_i (void);
+
//@}
private: