summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ace/ATM_Connector.cpp29
-rw-r--r--ace/ATM_Connector.h19
-rw-r--r--ace/ATM_Connector.i124
-rw-r--r--ace/ATM_QoS.cpp406
-rw-r--r--ace/ATM_QoS.h2
-rw-r--r--ace/ATM_Stream.cpp111
-rw-r--r--ace/ATM_Stream.i47
7 files changed, 358 insertions, 380 deletions
diff --git a/ace/ATM_Connector.cpp b/ace/ATM_Connector.cpp
index 496b2ff5a27..14061626fbc 100644
--- a/ace/ATM_Connector.cpp
+++ b/ace/ATM_Connector.cpp
@@ -13,9 +13,9 @@ ACE_RCSID(ace, ATM_Connector, "$Id$")
#include "ace/ATM_Connector.i"
#endif /* __ACE_INLINE__ */
-ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Connector)
+ ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Connector)
-void
+ void
ACE_ATM_Connector::dump (void) const
{
ACE_TRACE ("ACE_ATM_Connector::dump");
@@ -32,14 +32,14 @@ ACE_ATM_Connector::ACE_ATM_Connector (void)
int
ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream,
- const ACE_ATM_Addr &remote_sap,
+ const ACE_ATM_Addr &remote_sap,
ACE_ATM_Params params,
ACE_ATM_QoS options,
- ACE_Time_Value *timeout,
- const ACE_ATM_Addr &local_sap,
- int reuse_addr,
- int flags,
- int perms)
+ ACE_Time_Value *timeout,
+ const ACE_ATM_Addr &local_sap,
+ int reuse_addr,
+ int flags,
+ int perms)
{
ACE_TRACE ("ACE_ATM_Connector::connect");
#if defined (ACE_HAS_FORE_ATM_XTI)
@@ -58,19 +58,6 @@ ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream,
#elif defined (ACE_HAS_FORE_ATM_WS2)
ACE_OS::printf( "ATM_Connector(connect): set QoS parameters\n" );
-// return connector_.connect(new_stream.get_stream(),
-// remote_sap,
-// options.get_option_params(),
-// timeout,
-// local_sap,
-// 0,
-// 0,
-// flags,
-// reuse_addr,
-// perms,
-// params.get_protocol_family(),
-// params.get_protocol());
-
ACE_HANDLE s = new_stream.get_handle();
struct sockaddr_atm *saddr = ( struct sockaddr_atm *)remote_sap.get_addr();
ACE_QoS cqos = options.get_qos();
diff --git a/ace/ATM_Connector.h b/ace/ATM_Connector.h
index 5a405d1b79f..0202bb1def1 100644
--- a/ace/ATM_Connector.h
+++ b/ace/ATM_Connector.h
@@ -109,19 +109,16 @@ public:
// the connected ACE_SOCK_Stream. If <remote_sap> is non-NULL then it
// will contain the address of the connected peer.
+ //int add_leaf (ACE_ATM_Stream &current_stream,
+ // const ACE_Addr &remote_sap,
+ // ACE_INT32 leaf_id,
+ // ACE_Time_Value *timeout = 0);
int add_leaf (ACE_ATM_Stream &current_stream,
const ACE_Addr &remote_sap,
- ACE_INT32 leaf_id,
- ACE_Time_Value *timeout = 0);
- // Actively add a leaf to the currently connected stream (i.e.,
- // multicast). The <remote_sap> is the address of the leaf that we
- // are trying to add. The <timeout> is the amount of time to wait to
- // connect. If it's 0 then we block indefinitely. If *timeout ==
- // {0, 0} then the connection is done using non-blocking mode. In
- // this case, if the connection can't be made immediately the value
- // of -1 is returned with <errno == EWOULDBLOCK>. If *timeout >
- // {0, 0} then this is the amount of time to wait before timing out.
- // If the time expires before the connection is made <errno == ETIME>.
+ ACE_ATM_QoS &qos);
+ // Actively add a leaf to the root (i.e., point-to-multipoint). The
+ // <remote_sap> is the address of the leaf that we
+ // are trying to add.
int reset_new_handle (ACE_HANDLE handle);
// Resets any event associations on this handle
diff --git a/ace/ATM_Connector.i b/ace/ATM_Connector.i
index f67ca3414ca..8f9187f8ac4 100644
--- a/ace/ATM_Connector.i
+++ b/ace/ATM_Connector.i
@@ -5,14 +5,14 @@
ACE_INLINE
ACE_ATM_Connector::ACE_ATM_Connector (ACE_ATM_Stream &new_stream,
- const ACE_ATM_Addr &remote_sap,
+ const ACE_ATM_Addr &remote_sap,
ACE_ATM_Params params,
ACE_ATM_QoS options,
- ACE_Time_Value *timeout,
- const ACE_ATM_Addr &local_sap,
- int reuse_addr,
- int flags,
- int perms)
+ ACE_Time_Value *timeout,
+ const ACE_ATM_Addr &local_sap,
+ int reuse_addr,
+ int flags,
+ int perms)
{
ACE_TRACE ("ACE_ATM_Connector::ACE_ATM_Connector");
if ((ACE_HANDLE)this->connect (new_stream,
@@ -22,71 +22,13 @@ ACE_ATM_Connector::ACE_ATM_Connector (ACE_ATM_Stream &new_stream,
timeout,
local_sap,
reuse_addr,
- flags,
+ flags,
perms) == ACE_INVALID_HANDLE
&& timeout != 0 && !(errno == EWOULDBLOCK || errno == ETIME))
ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"),
- ASYS_TEXT ("ACE_ATM_Stream::ACE_ATM_Stream")));
+ ASYS_TEXT ("ACE_ATM_Stream::ACE_ATM_Stream")));
}
-// Connect the <new_stream> to the <remote_sap>, waiting up to
-// <timeout> amount of time if necessary.
-
-//ACE_INLINE
-//int
-//ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream,
-// const ACE_ATM_Addr &remote_sap,
-// ACE_ATM_Params params,
-// ACE_ATM_QoS options,
-// ACE_Time_Value *timeout,
-// const ACE_ATM_Addr &local_sap,
-// int reuse_addr,
-// int flags,
-// int perms)
-//{
-// ACE_TRACE ("ACE_ATM_Connector::connect");
-//#if defined (ACE_HAS_FORE_ATM_XTI)
-// return connector_.connect(new_stream.get_stream(),
-// remote_sap,
-// timeout,
-// local_sap,
-// reuse_addr,
-// flags,
-// perms,
-// params.get_device(),
-// params.get_info(),
-// params.get_rw_flag(),
-// params.get_user_data(),
-// &options.get_qos());
-//#elif defined (ACE_HAS_FORE_ATM_WS2)
-// ACE_OS::printf( "ATM_Connector(connect): to connect\n" );
-//
-// return connector_.connect(new_stream.get_stream(),
-// remote_sap,
-// options.get_option_params(),
-// timeout,
-// local_sap,
-// 0,
-// 0,
-// flags,
-// reuse_addr,
-// perms,
-// params.get_protocol_family(),
-// params.get_protocol());
-//#else
-// ACE_UNUSED_ARG (new_stream);
-// ACE_UNUSED_ARG (remote_sap);
-// ACE_UNUSED_ARG (params);
-// ACE_UNUSED_ARG (options);
-// ACE_UNUSED_ARG (timeout);
-// ACE_UNUSED_ARG (local_sap);
-// ACE_UNUSED_ARG (reuse_addr);
-// ACE_UNUSED_ARG (flags);
-// ACE_UNUSED_ARG (perms);
-// return 0;
-//#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2 */
-//}
-
// Try to complete a non-blocking connection.
ACE_INLINE
@@ -112,8 +54,7 @@ ACE_INLINE
int
ACE_ATM_Connector::add_leaf (ACE_ATM_Stream &current_stream,
const ACE_Addr &remote_sap,
- ACE_INT32 leaf_id,
- ACE_Time_Value *timeout)
+ ACE_ATM_QoS &qos)
{
ACE_TRACE ("ACE_ATM_Connector::add_leaf");
#if defined (ACE_HAS_FORE_ATM_XTI)
@@ -122,37 +63,28 @@ ACE_ATM_Connector::add_leaf (ACE_ATM_Stream &current_stream,
leaf_id,
timeout);
#elif defined (ACE_HAS_FORE_ATM_WS2)
- ACE_UNUSED_ARG(leaf_id);
- ACE_UNUSED_ARG(timeout);
+ struct sockaddr_atm *saddr = (struct sockaddr_atm *)remote_sap.get_addr();
+ ACE_QoS cqos = qos.get_qos();
+ int addr_len = sizeof( struct sockaddr_atm );
- SOCKET ns;
- int len = sizeof( struct sockaddr_atm );
- struct sockaddr_atm *laddr;
- laddr = ( struct sockaddr_atm *)remote_sap.get_addr();
+ ACE_QoS_Params qos_params(0,
+ 0,
+ &cqos,
+ 0,
+ (JL_SENDER_ONLY));
+
+ ACE_OS::printf( "ATM_Connector::add_leaf: connecting...\n" );
- ns = ::WSAJoinLeaf(( SOCKET )current_stream.get_handle(),
- ( struct sockaddr FAR *)laddr,
- //( struct sockaddr *)remote_sap.get_addr(),
- len,
- NULL, // caller data
- NULL, // callee data
- NULL, // SQos
- NULL, // GQos
- JL_SENDER_ONLY );
-
- if ( ns == INVALID_SOCKET ) {
- ACE_OS::printf( "Connector(add_leaf): WSAJoinLeaf %d\n",
+ ACE_HANDLE result = ACE_OS::join_leaf(current_stream.get_handle(),
+ (struct sockaddr *)saddr,
+ addr_len,
+ qos_params);
+
+ if ( result == ACE_INVALID_HANDLE )
+ ACE_OS::printf( "ATM_Connector(add_leaf): connection failed, %d\n",
::WSAGetLastError());
- return -1;
- }
-
-// ACE_HANDLE nah;
-
-// nah = ACE_OS::join_leaf( current_stream.get_handle(),
-// ( struct sockaddr *)remote_sap.get_addr(),
-// NULL );
-
- return 0;
+
+ return (result != ACE_INVALID_HANDLE);
#else
ACE_UNUSED_ARG(current_stream);
ACE_UNUSED_ARG(remote_sap);
diff --git a/ace/ATM_QoS.cpp b/ace/ATM_QoS.cpp
index 747098034ab..6c794e29d31 100644
--- a/ace/ATM_QoS.cpp
+++ b/ace/ATM_QoS.cpp
@@ -13,8 +13,8 @@ ACE_RCSID(ace, ATM_QoS, "$Id$")
#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2)
#define BHLI_MAGIC "FORE_ATM"
-// This is line rate in cells/s for an OC-3 MM interface.
-const long ACE_ATM_QoS::LINE_RATE = 353207;
+ // This is line rate in cells/s for an OC-3 MM interface.
+ const long ACE_ATM_QoS::LINE_RATE = 353207;
const int ACE_ATM_QoS::OPT_FLAGS_CPID = 0x1;
const int ACE_ATM_QoS::OPT_FLAGS_PMP = 0x2;
const int ACE_ATM_QoS::DEFAULT_SELECTOR = 0x99;
@@ -27,7 +27,7 @@ const int ACE_ATM_QoS::DEFAULT_SELECTOR = 0x0;
ACE_ALLOC_HOOK_DEFINE(ACE_ATM_QoS)
-ACE_ATM_QoS::ACE_ATM_QoS( int rate )
+ ACE_ATM_QoS::ACE_ATM_QoS( int rate )
{
ACE_TRACE( "ACE_ATM_QoS::ACE_ATM_QoS" );
#if defined (ACE_HAS_FORE_ATM_WS2)
@@ -39,107 +39,107 @@ ACE_ATM_QoS::ACE_ATM_QoS( int rate )
int size;
// Setting up cbr parameters ...
- ie_aalparams.AALType = AALTYPE_5;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize
+ ie_aalparams.AALType = AALTYPE_5;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize
= 1516; //8096;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize
= 1516; //8096;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;
- size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE);
+ size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE);
- ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.PeakCellRate_CLP01 = rate;
+ ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Forward.PeakCellRate_CLP01 = rate;
ie_td.Forward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Forward.Tagging = SAP_FIELD_ABSENT;
-
- ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Backward.PeakCellRate_CLP01 = rate;
- ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Backward.Tagging = SAP_FIELD_ABSENT;
-
- ie_td.BestEffort = 0; // Note: this must be set to zero for CBR.
-
- size += sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
+ ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Forward.Tagging = SAP_FIELD_ABSENT;
+
+ ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Backward.PeakCellRate_CLP01 = rate;
+ ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Backward.Tagging = SAP_FIELD_ABSENT;
+
+ ie_td.BestEffort = 0; // Note: this must be set to zero for CBR.
+
+ size += sizeof( Q2931_IE_TYPE )
+ + sizeof( ULONG )
+ + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
- ie_bbc.BearerClass = BCOB_X;
- ie_bbc.TrafficType = TT_CBR;
- ie_bbc.TimingRequirements = TR_END_TO_END;
- ie_bbc.ClippingSusceptability = CLIP_NOT;
- ie_bbc.UserPlaneConnectionConfig = UP_P2P;
+ ie_bbc.BearerClass = BCOB_X;
+ ie_bbc.TrafficType = TT_CBR;
+ ie_bbc.TimingRequirements = TR_END_TO_END;
+ ie_bbc.ClippingSusceptability = CLIP_NOT;
+ ie_bbc.UserPlaneConnectionConfig = UP_P2P;
- size += sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE );
+ size += sizeof( Q2931_IE_TYPE )
+ + sizeof( ULONG )
+ + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE );
- ie_qos.QOSClassForward = QOS_CLASS1;
- ie_qos.QOSClassBackward = QOS_CLASS1; // This may not be really used
- // since we do only simplex data xfer.
+ ie_qos.QOSClassForward = QOS_CLASS1;
+ ie_qos.QOSClassBackward = QOS_CLASS1; // This may not be really used
+ // since we do only simplex data xfer.
- size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
+ size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
qos_.ProviderSpecific.buf = (char *) ACE_OS::malloc(size);
- qos_.ProviderSpecific.len = size;
+ qos_.ProviderSpecific.len = size;
ACE_OS::memset(qos_.ProviderSpecific.buf, 0, size);
- ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf;
- ie_ptr->IEType = IE_AALParameters;
- ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( AAL_PARAMETERS_IE );
+ ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf;
+ ie_ptr->IEType = IE_AALParameters;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
+ + sizeof( ULONG )
+ + sizeof( AAL_PARAMETERS_IE );
ACE_OS::memcpy(ie_ptr->IE, &ie_aalparams, sizeof(AAL_PARAMETERS_IE));
- ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
- ie_ptr->IEType = IE_TrafficDescriptor;
- ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
+ ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
+ ie_ptr->IEType = IE_TrafficDescriptor;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
+ + sizeof( ULONG )
+ + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
ACE_OS::memcpy(ie_ptr->IE, &ie_td, sizeof(ATM_TRAFFIC_DESCRIPTOR_IE));
- ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
- ie_ptr->IEType = IE_BroadbandBearerCapability;
- ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE );
+ ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
+ ie_ptr->IEType = IE_BroadbandBearerCapability;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
+ + sizeof( ULONG )
+ + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE );
ACE_OS::memcpy(ie_ptr->IE,
&ie_bbc,
sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE));
- ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
- ie_ptr->IEType = IE_QOSClass;
- ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_QOS_CLASS_IE );
+ ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
+ ie_ptr->IEType = IE_QOSClass;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE )
+ + sizeof( ULONG )
+ + sizeof( ATM_QOS_CLASS_IE );
ACE_OS::memcpy(ie_ptr->IE, &ie_qos, sizeof(ATM_QOS_CLASS_IE));
-// qos_.SendingFlowspec.TokenRate = 0xffffffff;
-// qos_.SendingFlowspec.TokenBucketSize = 0xffffffff;
-// qos_.SendingFlowspec.PeakBandwidth = 0xffffffff;
-// qos_.SendingFlowspec.Latency = 0xffffffff;
-// qos_.SendingFlowspec.DelayVariation = 0xffffffff;
-// qos_.SendingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
- // This will most probably be ignored by the service provider.
-// qos_.SendingFlowspec.MaxSduSize = 0xffffffff;
-// qos_.SendingFlowspec.MinimumPolicedSize = 0xffffffff;
-
-// qos_.ReceivingFlowspec.TokenRate = 0xffffffff;
-// qos_.ReceivingFlowspec.TokenBucketSize = 0xffffffff;
-// qos_.ReceivingFlowspec.PeakBandwidth = 0xffffffff;
-// qos_.ReceivingFlowspec.Latency = 0xffffffff;
-// qos_.ReceivingFlowspec.DelayVariation = 0xffffffff;
-// qos_.ReceivingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
- // This will most probably be ignored by the service provider.
-// qos_.ReceivingFlowspec.MaxSduSize = 0xffffffff;
-// qos_.ReceivingFlowspec.MinimumPolicedSize = 0;
+ // qos_.SendingFlowspec.TokenRate = 0xffffffff;
+ // qos_.SendingFlowspec.TokenBucketSize = 0xffffffff;
+ // qos_.SendingFlowspec.PeakBandwidth = 0xffffffff;
+ // qos_.SendingFlowspec.Latency = 0xffffffff;
+ // qos_.SendingFlowspec.DelayVariation = 0xffffffff;
+ // qos_.SendingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
+ // This will most probably be ignored by the service provider.
+ // qos_.SendingFlowspec.MaxSduSize = 0xffffffff;
+ // qos_.SendingFlowspec.MinimumPolicedSize = 0xffffffff;
+
+ // qos_.ReceivingFlowspec.TokenRate = 0xffffffff;
+ // qos_.ReceivingFlowspec.TokenBucketSize = 0xffffffff;
+ // qos_.ReceivingFlowspec.PeakBandwidth = 0xffffffff;
+ // qos_.ReceivingFlowspec.Latency = 0xffffffff;
+ // qos_.ReceivingFlowspec.DelayVariation = 0xffffffff;
+ // qos_.ReceivingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
+ // This will most probably be ignored by the service provider.
+ // qos_.ReceivingFlowspec.MaxSduSize = 0xffffffff;
+ // qos_.ReceivingFlowspec.MinimumPolicedSize = 0;
ACE_Flow_Spec send_fspec( 0xffffffff,
0xffffffff,
@@ -152,19 +152,19 @@ ACE_ATM_QoS::ACE_ATM_QoS( int rate )
0xffffffff,
15,
ACE_DEFAULT_THREAD_PRIORITY ),
- recv_fspec( 0xffffffff,
- 0xffffffff,
- 0xffffffff,
- 0xffffffff,
- 0xffffffff,
- SERVICETYPE_BESTEFFORT,
- // This will most probably ignored by SP.
- 0xffffffff,
- 0,
- 15,
- ACE_DEFAULT_THREAD_PRIORITY );
-
- qos_.sending_flowspec( send_fspec );
+ recv_fspec( 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ SERVICETYPE_BESTEFFORT,
+ // This will most probably ignored by SP.
+ 0xffffffff,
+ 0,
+ 15,
+ ACE_DEFAULT_THREAD_PRIORITY );
+
+ qos_.sending_flowspec( send_fspec );
qos_.receiving_flowspec( recv_fspec );
#elif defined (ACE_HAS_FORE_ATM_XTI)
ACE_UNUSED_ARG (rate);
@@ -178,145 +178,169 @@ ACE_ATM_QoS::set_cbr_rate (int rate)
{
ACE_TRACE ("ACE_ATM_QoS::set_cbr_rate");
#if defined (ACE_HAS_FORE_ATM_WS2)
+ /*
AAL_PARAMETERS_IE ie_aalparams;
ATM_TRAFFIC_DESCRIPTOR_IE ie_td;
ATM_BROADBAND_BEARER_CAPABILITY_IE ie_bbc;
ATM_QOS_CLASS_IE ie_qos;
Q2931_IE *ie_ptr;
int size;
+ */
ACE_OS::printf( "ATM_QoS(set_cbr_rate): set rate to %d c/s\n", rate );
// Setting up cbr parameters ...
- ie_aalparams.AALType = AALTYPE_5;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize
+ /*
+ FORE has changed this - we no longer specify QoS this way
+ ie_aalparams.AALType = AALTYPE_5;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize
= 1516; //8096;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize
= 1516; //8096;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;
- size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE);
+ size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE);
- ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.PeakCellRate_CLP01 = rate;
+ ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Forward.PeakCellRate_CLP01 = rate;
ie_td.Forward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Forward.Tagging = SAP_FIELD_ABSENT;
+ ie_td.Forward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Forward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Forward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Forward.Tagging = SAP_FIELD_ABSENT;
- ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Backward.PeakCellRate_CLP01 = rate;
- ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
- ie_td.Backward.Tagging = SAP_FIELD_ABSENT;
+ ie_td.Backward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Backward.PeakCellRate_CLP01 = rate;
+ ie_td.Backward.SustainableCellRate_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Backward.SustainableCellRate_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Backward.MaxBurstSize_CLP0 = SAP_FIELD_ABSENT;
+ ie_td.Backward.MaxBurstSize_CLP01 = SAP_FIELD_ABSENT;
+ ie_td.Backward.Tagging = SAP_FIELD_ABSENT;
- ie_td.BestEffort = 0; // Note: this must be set to zero for CBR.
+ ie_td.BestEffort = 0; // Note: this must be set to zero for CBR.
- size += sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
+ size += sizeof( Q2931_IE_TYPE ) +
+ sizeof( ULONG ) +
+ sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
- ie_bbc.BearerClass = BCOB_X;
- ie_bbc.TrafficType = TT_CBR;
- ie_bbc.TimingRequirements = TR_END_TO_END;
- ie_bbc.ClippingSusceptability = CLIP_NOT;
- ie_bbc.UserPlaneConnectionConfig = UP_P2P;
+ ie_bbc.BearerClass = BCOB_X;
+ ie_bbc.TrafficType = TT_CBR;
+ ie_bbc.TimingRequirements = TR_END_TO_END;
+ ie_bbc.ClippingSusceptability = CLIP_NOT;
+ ie_bbc.UserPlaneConnectionConfig = UP_P2P;
- size += sizeof(Q2931_IE_TYPE)
- + sizeof(ULONG)
- + sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE);
+ size += sizeof(Q2931_IE_TYPE) +
+ sizeof(ULONG) +
+ sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE);
- ie_qos.QOSClassForward = QOS_CLASS1;
- ie_qos.QOSClassBackward = QOS_CLASS1; // This may not be really used
- // since we only simplex data xfer.
+ ie_qos.QOSClassForward = QOS_CLASS1;
+ ie_qos.QOSClassBackward = QOS_CLASS1; // This may not be really used
+ // since we only simplex data xfer.
- size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
+ size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
qos_.ProviderSpecific.buf = (char *) ACE_OS::malloc(size);
- qos_.ProviderSpecific.len = size;
+ qos_.ProviderSpecific.len = size;
ACE_OS::memset(qos_.ProviderSpecific.buf, 0, size);
- ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf;
- ie_ptr->IEType = IE_AALParameters;
- ie_ptr->IELength
- = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( AAL_PARAMETERS_IE );
+ ie_ptr = (Q2931_IE *) qos_.ProviderSpecific.buf;
+ ie_ptr->IEType = IE_AALParameters;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) +
+ sizeof( ULONG ) +
+ sizeof( AAL_PARAMETERS_IE );
ACE_OS::memcpy(ie_ptr->IE, &ie_aalparams, sizeof(AAL_PARAMETERS_IE));
- ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
- ie_ptr->IEType = IE_TrafficDescriptor;
- ie_ptr->IELength
- = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
+ ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
+ ie_ptr->IEType = IE_TrafficDescriptor;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) +
+ sizeof( ULONG ) +
+ sizeof( ATM_TRAFFIC_DESCRIPTOR_IE );
ACE_OS::memcpy(ie_ptr->IE, &ie_td, sizeof(ATM_TRAFFIC_DESCRIPTOR_IE));
- ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
- ie_ptr->IEType = IE_BroadbandBearerCapability;
- ie_ptr->IELength
- = sizeof( Q2931_IE_TYPE )
- + sizeof( ULONG )
- + sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE );
+ ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
+ ie_ptr->IEType = IE_BroadbandBearerCapability;
+ ie_ptr->IELength = sizeof( Q2931_IE_TYPE ) +
+ sizeof( ULONG ) +
+ sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE );
ACE_OS::memcpy( ie_ptr->IE,
&ie_bbc,
sizeof( ATM_BROADBAND_BEARER_CAPABILITY_IE ));
- ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
- ie_ptr->IEType = IE_QOSClass;
- ie_ptr->IELength
- = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
+ ie_ptr = (Q2931_IE *) ((char *)ie_ptr + ie_ptr->IELength);
+ ie_ptr->IEType = IE_QOSClass;
+ ie_ptr->IELength = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) +
+ sizeof(ATM_QOS_CLASS_IE);
ACE_OS::memcpy(ie_ptr->IE, &ie_qos, sizeof(ATM_QOS_CLASS_IE));
-
-// qos_.SendingFlowspec.TokenRate = 0xffffffff;
-// qos_.SendingFlowspec.TokenBucketSize = 0xffffffff;
-// qos_.SendingFlowspec.PeakBandwidth = 0xffffffff;
-// qos_.SendingFlowspec.Latency = 0xffffffff;
-// qos_.SendingFlowspec.DelayVariation = 0xffffffff;
-// qos_.SendingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
- // This will most probably be ignored by the service provider.
-// qos_.SendingFlowspec.MaxSduSize = 0xffffffff;
-// qos_.SendingFlowspec.MinimumPolicedSize = 0xffffffff;
-
-// qos_.ReceivingFlowspec.TokenRate = 0xffffffff;
-// qos_.ReceivingFlowspec.TokenBucketSize = 0xffffffff;
-// qos_.ReceivingFlowspec.PeakBandwidth = 0xffffffff;
-// qos_.ReceivingFlowspec.Latency = 0xffffffff;
-// qos_.ReceivingFlowspec.DelayVariation = 0xffffffff;
-// qos_.ReceivingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
- // This will most probably be ignored by the service provider.
-// qos_.ReceivingFlowspec.MaxSduSize = 0xffffffff;
-// qos_.ReceivingFlowspec.MinimumPolicedSize = 0;
-
+ */
+
+ const int BYTES_PER_ATM_CELL = 53;
+ ACE_OS::memset(&qos_, 0, sizeof(ATM_QoS));
+ // Setting the token rate sets the minimum rate. 3 Mbits/sec seems too high.
+ // Certainly for Vaudeville audio, we only need about 1000 c/s which is
+ // 424000 bits/sec which is 53000 bytes/sec.
+ //qos_.SendingFlowspec.TokenRate = 3*(1024*128); // 3Mbits/sec
+ qos_.SendingFlowspec.TokenRate = 53000; // 1000 cells/sec
+ qos_.SendingFlowspec.TokenBucketSize = 32*1024; // our block size
+ //ourQos.SendingFlowspec.PeakBandwidth = ourQos.SendingFlowspec.TokenRate;
+ qos_.SendingFlowspec.ServiceType = SERVICETYPE_GUARANTEED;
+ // Peak bandwidth is in bytes/sec. The rate is specified in cells/sec so
+ // we need to convert from cells/sec to bytes/sec (i.e., multiply by 53).
+ qos_.SendingFlowspec.PeakBandwidth = rate * BYTES_PER_ATM_CELL;
+ qos_.SendingFlowspec.Latency = -1; // we don't care too much
+ qos_.SendingFlowspec.DelayVariation = -1; // we don't care too much
+ // no provider-specific data allowed on ATM
+ qos_.ProviderSpecific.buf=NULL;
+ qos_.ProviderSpecific.len=0;
+ // unidirectional P2MP; we don't need to setup the Receiving flowspec
+
+ //qos_.SendingFlowspec.TokenRate = 0xffffffff;
+ //qos_.SendingFlowspec.TokenBucketSize = 0xffffffff;
+ //qos_.SendingFlowspec.PeakBandwidth = 0xffffffff;
+ //qos_.SendingFlowspec.Latency = 0xffffffff;
+ //qos_.SendingFlowspec.DelayVariation = 0xffffffff;
+ //qos_.SendingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
+ // This will most probably be ignored by the service provider.
+ //qos_.SendingFlowspec.MaxSduSize = 0xffffffff;
+ //qos_.SendingFlowspec.MinimumPolicedSize = 0xffffffff;
+
+ //qos_.ReceivingFlowspec.TokenRate = 0xffffffff;
+ //qos_.ReceivingFlowspec.TokenBucketSize = 0xffffffff;
+ //qos_.ReceivingFlowspec.PeakBandwidth = 0xffffffff;
+ //qos_.ReceivingFlowspec.Latency = 0xffffffff;
+ //qos_.ReceivingFlowspec.DelayVariation = 0xffffffff;
+ //qos_.ReceivingFlowspec.ServiceType = SERVICETYPE_BESTEFFORT;
+ // This will most probably be ignored by the service provider.
+ //qos_.ReceivingFlowspec.MaxSduSize = 0xffffffff;
+ //qos_.ReceivingFlowspec.MinimumPolicedSize = 0;
+
+ /*
ACE_Flow_Spec send_fspec( 0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
- SERVICETYPE_BESTEFFORT,
+ SERVICETYPE_BESTEFFORT,
// This will most probably ignored by SP.
0xffffffff,
0xffffffff,
15,
ACE_DEFAULT_THREAD_PRIORITY ),
- recv_fspec( 0xffffffff,
- 0xffffffff,
- 0xffffffff,
- 0xffffffff,
- 0xffffffff,
- SERVICETYPE_BESTEFFORT,
- // This will most probably ignored by SP.
- 0xffffffff,
- 0,
- 15,
- ACE_DEFAULT_THREAD_PRIORITY );
-
- qos_.sending_flowspec( send_fspec );
+ recv_fspec( 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ SERVICETYPE_BESTEFFORT,
+ // This will most probably ignored by SP.
+ 0xffffffff,
+ 0,
+ 15,
+ ACE_DEFAULT_THREAD_PRIORITY );
+
+ qos_.sending_flowspec( send_fspec );
qos_.receiving_flowspec( recv_fspec );
+ */
#elif defined (ACE_HAS_FORE_ATM_XTI)
ACE_UNUSED_ARG (rate);
#else
@@ -377,12 +401,12 @@ ACE_ATM_QoS::construct_options (ACE_HANDLE fd,
return 0;
}
- buf = (char *) ACE_OS::malloc (info.options);
+ buf = (char *) ACE_OS::malloc (info.options);
- if (buf == 0)
+ if (buf == 0)
ACE_ERROR_RETURN ((LM_ERROR,
- ASYS_TEXT ("Unable to allocate %ld bytes for options\n"),
- info.options),
+ ASYS_TEXT ("Unable to allocate %ld bytes for options\n"),
+ info.options),
0);
popt = (struct t_opthdr *) buf;
diff --git a/ace/ATM_QoS.h b/ace/ATM_QoS.h
index 84c183221fb..d4d7189bda4 100644
--- a/ace/ATM_QoS.h
+++ b/ace/ATM_QoS.h
@@ -65,7 +65,7 @@ public:
// Set the rate.
void set_cbr_rate (int);
- // Set CBR rate.
+ // Set CBR rate in cells per second.
ATM_QoS get_qos (void);
// Get ATM_QoS struct.
diff --git a/ace/ATM_Stream.cpp b/ace/ATM_Stream.cpp
index 9564c98a875..c0dcdfc8f6f 100644
--- a/ace/ATM_Stream.cpp
+++ b/ace/ATM_Stream.cpp
@@ -14,9 +14,9 @@ ACE_RCSID(ace, ATM_Stream, "$Id$")
#include "ace/ATM_Stream.i"
#endif /* __ACE_INLINE__ */
-ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Stream)
+ ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Stream)
-void
+ void
ACE_ATM_Stream::dump (void) const
{
ACE_TRACE ("ACE_ATM_Stream::dump");
@@ -27,27 +27,27 @@ ACE_ATM_Stream::get_peer_name (void) const
{
ACE_TRACE ("ACE_ATM_Stream::get_peer_name");
#if defined (ACE_HAS_FORE_ATM_XTI)
-// // Use t_getprotaddr for XTI/ATM
-// struct t_bind *localaddr
-// = (struct t_bind *) ACE_OS::t_alloc (get_handle (),
-// T_BIND,
-// T_ADDR);
-// struct t_bind *peeraddr
-// = (struct t_bind *) ACE_OS::t_alloc (get_handle (),
-// T_BIND,
-// T_ADDR);
-// ::t_getprotaddr(get_handle (),
-// localaddr,
-// peeraddr);
-
-// char* connected_name = (char*) ACE_OS::malloc(peeraddr->addr.len + 1);
-// ACE_OS::strcpy(connected_name,
-// peeraddr->addr.buf);
-// ACE_OS::t_free ((char *) localaddr,
-// T_BIND);
-// ACE_OS::t_free ((char *) peeraddr,
-// T_BIND);
-// return (connected_name);
+ // // Use t_getprotaddr for XTI/ATM
+ // struct t_bind *localaddr
+ // = (struct t_bind *) ACE_OS::t_alloc (get_handle (),
+ // T_BIND,
+ // T_ADDR);
+ // struct t_bind *peeraddr
+ // = (struct t_bind *) ACE_OS::t_alloc (get_handle (),
+ // T_BIND,
+ // T_ADDR);
+ // ::t_getprotaddr(get_handle (),
+ // localaddr,
+ // peeraddr);
+
+ // char* connected_name = (char*) ACE_OS::malloc(peeraddr->addr.len + 1);
+ // ACE_OS::strcpy(connected_name,
+ // peeraddr->addr.buf);
+ // ACE_OS::t_free ((char *) localaddr,
+ // T_BIND);
+ // ACE_OS::t_free ((char *) peeraddr,
+ // T_BIND);
+ // return (connected_name);
#error "This doesn't seem to work. May need to jimmy-rig something with the"
#error "/etc/xti_hosts file - Ugh!"
@@ -64,9 +64,9 @@ ACE_ATM_Stream::get_peer_name (void) const
#elif defined (ACE_HAS_FORE_ATM_WS2)
// Use getpeername for WinSock2.
- struct sockaddr_in name;
+ struct sockaddr_atm name;
+ ACE_OS::memset(&name, 0, sizeof(name));
int nameSize = sizeof(name);
- struct hostent *peerhost;
if (ACE_OS::getpeername(this->get_handle (),
(struct sockaddr *) &name,
@@ -74,11 +74,41 @@ ACE_ATM_Stream::get_peer_name (void) const
{
return 0;
}
- peerhost = ACE_OS::gethostbyaddr(( char *)name.sin_addr.S_un.S_addr,
- sizeof( unsigned long ),
- PF_INET );
- return peerhost -> h_name;
+ char buffer[256];
+ for (unsigned int index = 0; index < ATM_ADDR_SIZE - 1; index++ ) {
+ buffer[ index * 3 ] = '\0';
+ sprintf(buffer, "%s%02x.", buffer, name.satm_number.Addr[ index ]);
+ }
+ buffer[ (ATM_ADDR_SIZE - 1) * 3 ] = '\0';
+ sprintf(buffer, "%s%02x.", buffer, 0);
+ buffer[ ATM_ADDR_SIZE * 3 - 1 ] = '\0';
+ for (index = 0; index < ACE_OS::strlen(buffer); ++index)
+ buffer[index] = tolower(buffer[index]);
+
+ ifstream atm_hosts("C:/WINNT/atmhosts");
+ assert(atm_hosts.is_open());
+
+ // Find the host address in the ATM hosts file and return the
+ // host name
+ char line[256];
+ char *host_ptr, *host_name = new char[256];
+ while (!atm_hosts.eof()) {
+ atm_hosts.getline(line, 256);
+ // Convert the line to lower case to ease comparison
+ for (index = 0; index < ACE_OS::strlen(line); ++index)
+ line[index] = tolower(line[index]);
+ if (strstr(line, buffer) != 0)
+ {
+ // Grab the second token which is the host name
+ strtok(line, " \t");
+ host_ptr = strtok(0, " \t");
+ strcpy(host_name, host_ptr);
+ break;
+ }
+ }
+
+ return host_name;
#else
return 0;
#endif /* ACE_HAS_FORE_ATM_XTI */
@@ -178,19 +208,19 @@ ACE_ATM_Stream::get_vpi_vci (ACE_UINT16 &vpi,
DWORD bytes = 0;
if ( ::WSAIoctl(( int )this -> get_handle(),
- SIO_GET_ATM_CONNECTION_ID,
- NULL,
- 0,
- (LPVOID) &connID,
- sizeof(ATM_CONNECTION_ID),
- &bytes,
- NULL,
- NULL)
- == SOCKET_ERROR) {
+ SIO_GET_ATM_CONNECTION_ID,
+ NULL,
+ 0,
+ (LPVOID) &connID,
+ sizeof(ATM_CONNECTION_ID),
+ &bytes,
+ NULL,
+ NULL)
+ == SOCKET_ERROR) {
ACE_OS::printf("Error: WSAIoctl %d\n", WSAGetLastError());
- }
+ }
- vpi = ( ACE_UINT16 )connID.VPI;
+ vpi = ( ACE_UINT16 )connID.VPI;
vci = ( ACE_UINT16 )connID.VCI;
return 0;
@@ -200,4 +230,3 @@ ACE_ATM_Stream::get_vpi_vci (ACE_UINT16 &vpi,
}
#endif /* ACE_HAS_ATM */
-
diff --git a/ace/ATM_Stream.i b/ace/ATM_Stream.i
index f0f42d47b6b..904934e75a5 100644
--- a/ace/ATM_Stream.i
+++ b/ace/ATM_Stream.i
@@ -23,13 +23,34 @@ ACE_ATM_Stream::open (ACE_ATM_Params params)
#elif defined (ACE_HAS_FORE_ATM_WS2)
params.set_flags( ACE_FLAG_MULTIPOINT_C_ROOT | ACE_FLAG_MULTIPOINT_D_ROOT );
- return stream_.open (params.get_type(),
- params.get_protocol_family(),
- params.get_protocol(),
- params.get_protocol_info(),
- params.get_sock_group(),
- params.get_flags(),
- params.get_reuse_addr());
+ int retval = stream_.open (params.get_type(),
+ params.get_protocol_family(),
+ params.get_protocol(),
+ params.get_protocol_info(),
+ params.get_sock_group(),
+ params.get_flags(),
+ params.get_reuse_addr());
+ if (retval == -1)
+ return -1;
+
+ struct sockaddr_atm sock_addr;
+
+ ACE_OS::memset(&sock_addr, 0, sizeof(struct sockaddr_atm));
+ sock_addr.satm_family = AF_ATM;
+ sock_addr.satm_number.AddressType=ADDR_ANY;
+ sock_addr.satm_number.NumofDigits = ATM_ADDR_SIZE;
+ sock_addr.satm_blli.Layer2Protocol = SAP_FIELD_ABSENT;
+ sock_addr.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT;
+ sock_addr.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT;
+ if (ACE_OS::bind(get_handle(),
+ (struct sockaddr FAR *)&sock_addr,
+ sizeof(struct sockaddr_atm)) < 0)
+ {
+ ACE_OS::printf("Error binding local address: %d",WSAGetLastError());
+ return -1;
+ }
+
+ return 0;
#else
ACE_UNUSED_ARG(params);
return 0;
@@ -48,18 +69,6 @@ ACE_ATM_Stream::close (void)
#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */
}
-//ACE_INLINE
-//ACE_HANDLE
-//ACE_ATM_Stream::get_handle (void) const
-//{
-// ACE_TRACE ("ACE_ATM_Stream::get_handle");
-//#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2)
-// return ((ACE_SOCK_Stream)stream_).get_handle ();
-//#else
-// return 0;
-//#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */
-//}
-
ACE_INLINE
ATM_Stream&
ACE_ATM_Stream::get_stream (void)