summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruibiao <ruibiao@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-10-12 16:30:51 +0000
committerruibiao <ruibiao@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-10-12 16:30:51 +0000
commit33fe98c12f2277cf270edefd8038a972c29bc049 (patch)
tree7398aaadef5768b7bba61447f2128dcdb76d2112
parent1d930cea52fdb5cf590fb76d659e628905b060a8 (diff)
downloadATCD-33fe98c12f2277cf270edefd8038a972c29bc049.tar.gz
ace/ATM_{Addr,Stream,Acceptor,Connector,QoS,Params}.{h,cpp,i}: Added support
for Fore ATM on Windows platform. Enabled when ACE_HAS_ATM and ACE_HAS_FORE_ATM_WS2 are defined.
-rw-r--r--ace/ATM_Acceptor.cpp186
-rw-r--r--ace/ATM_Acceptor.h15
-rw-r--r--ace/ATM_Acceptor.i70
-rw-r--r--ace/ATM_Addr.cpp73
-rw-r--r--ace/ATM_Addr.h13
-rw-r--r--ace/ATM_Addr.i4
-rw-r--r--ace/ATM_Connector.cpp78
-rw-r--r--ace/ATM_Connector.h15
-rw-r--r--ace/ATM_Connector.i177
-rw-r--r--ace/ATM_Params.cpp1
-rw-r--r--ace/ATM_Params.h51
-rw-r--r--ace/ATM_Params.i56
-rw-r--r--ace/ATM_QoS.cpp428
-rw-r--r--ace/ATM_QoS.h24
-rw-r--r--ace/ATM_QoS.i10
-rw-r--r--ace/ATM_Stream.cpp63
-rw-r--r--ace/ATM_Stream.h14
-rw-r--r--ace/ATM_Stream.i31
18 files changed, 950 insertions, 359 deletions
diff --git a/ace/ATM_Acceptor.cpp b/ace/ATM_Acceptor.cpp
index 0990c5a9df1..414f4a0712e 100644
--- a/ace/ATM_Acceptor.cpp
+++ b/ace/ATM_Acceptor.cpp
@@ -11,6 +11,9 @@ ACE_RCSID(ace, ATM_Acceptor, "$Id$")
#include "ace/ATM_Acceptor.i"
#endif /* __ACE_INLINE__ */
+// Put the actual definitions of the ACE_ATM_Request and
+// ACE_ATM_Request_Queue classes here to hide them from clients...
+
ACE_ALLOC_HOOK_DEFINE(ACE_ATM_Acceptor)
void
@@ -29,4 +32,187 @@ ACE_ATM_Acceptor::~ACE_ATM_Acceptor (void)
ACE_TRACE ("ACE_ATM_Acceptor::~ACE_ATM_Acceptor");
}
+int
+ACE_ATM_Acceptor::get_local_addr( ACE_ATM_Addr &local_addr )
+{
+ ACE_TRACE( "ACE_ATM_Acceptor::get_local_addr" );
+
+#if defined (ACE_HAS_FORE_ATM_WS2)
+ unsigned long ret = 0;
+ DWORD deviceID = 0;
+ ATM_ADDRESS addr;
+ struct sockaddr_atm *laddr;
+
+ if ( ::WSAIoctl(( int )(( ACE_SOCK_Acceptor *)this ) -> get_handle(),
+ SIO_GET_ATM_ADDRESS,
+ (LPVOID) &deviceID,
+ sizeof(DWORD),
+ ( LPVOID )&addr,
+ sizeof( ATM_ADDRESS ),
+ &ret,
+ NULL,
+ NULL ) == SOCKET_ERROR ) {
+ ACE_OS::printf( "ATM_Acceptor(get_local_addr): WSIoctl: %d\n",
+ ::WSAGetLastError());
+ return -1;
+ }
+
+ laddr = ( struct sockaddr_atm *)local_addr.get_addr();
+ ACE_OS::memcpy(( void *)&( laddr -> satm_number ),
+ ( void *)&addr,
+ ATM_ADDR_SIZE - 1 );
+
+ return 0;
+#elif defined (ACE_HAS_FORE_ATM_XTI)
+ ACE_UNUSED_ARG( local_addr );
+
+ return 0;
+#else
+ ACE_UNUSED_ARG( local_addr );
+
+ return 0;
+#endif /* ACE_HAS_FORE_ATM_WS2 && ACE_HAS_FORE_ATM_XTI */
+}
+
+ACE_HANDLE
+ACE_ATM_Acceptor::open (const ACE_Addr &remote_sap,
+ int backlog,
+ ACE_ATM_Params params)
+{
+ ACE_TRACE ("ACE_ATM_Acceptor::open");
+#if defined (ACE_HAS_FORE_ATM_XTI)
+ ACE_HANDLE handle = acceptor_.open (remote_sap,
+ params.get_reuse_addr(),
+ params.get_oflag(),
+ params.get_info(),
+ backlog,
+ params.get_device());
+ return (handle == ACE_INVALID_HANDLE ? -1 : 0);
+#elif defined (ACE_HAS_FORE_ATM_WS2)
+ //Unable to use ACE_SOCK_Acceptor.open
+ //because of its assumption of using SOCK_STREAM
+ //return (ACE_HANDLE)(acceptor_.open (remote_sap, //ACE_Addr
+ // protocol_info, //ACE_Protocol_Info
+ // 0, //ACE_SOCK_Group
+ // 0, //u_long flags
+ // params.get_reuse_addr(),
+ // params.get_protocol_family(),
+ // backlog,
+ // params.get_protocol()));
+
+ struct sockaddr_atm local_atm_addr;
+ ACE_HANDLE ret;
+ DWORD flags = 0;
+
+ /* Create a local endpoint of communication */
+
+ // Only leaves can listen.
+ flags = ACE_FLAG_MULTIPOINT_C_LEAF | ACE_FLAG_MULTIPOINT_D_LEAF;
+
+
+ if ((ret = ACE_OS::socket (AF_ATM,
+ SOCK_RAW,
+ ATMPROTO_AAL5,
+ NULL,
+ 0,
+ flags ))
+ == ACE_INVALID_HANDLE) {
+ ACE_OS::printf( "Acceptor(open): socket %d\n", ::WSAGetLastError()),
+ ACE_OS::exit (1);
+ }
+
+ ((ACE_SOCK_Acceptor *)this) -> set_handle( ret );
+
+ /* Set up the address information to become a server */
+ ACE_OS::memset ((void *) &local_atm_addr, 0, sizeof local_atm_addr);
+ local_atm_addr.satm_family = AF_ATM;
+ local_atm_addr.satm_number.AddressType = SAP_FIELD_ANY_AESA_REST;
+ local_atm_addr.satm_number.Addr[ ATM_ADDR_SIZE - 1 ]
+ = (( ACE_ATM_Addr *)&remote_sap ) -> get_selector();
+ local_atm_addr.satm_blli.Layer2Protocol = SAP_FIELD_ANY;
+ local_atm_addr.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT;
+ local_atm_addr.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT;
+
+ /* Associate address with endpoint */
+ if (ACE_OS::bind ((( ACE_SOCK_Acceptor *)this ) -> get_handle(),
+ ACE_reinterpret_cast(struct sockaddr *, &local_atm_addr),
+ sizeof local_atm_addr) == -1) {
+ ACE_OS::printf( "Acceptor(open): bind %d\n", ::WSAGetLastError());
+ ACE_OS::exit (1);
+ }
+
+ /* Make endpoint listen for service requests */
+ if (ACE_OS::listen ((( ACE_SOCK_Acceptor *)this ) -> get_handle(),
+ backlog)
+ == -1) {
+ ACE_OS::printf( "Acceptor(open): listen %d\n", ::WSAGetLastError());
+ ACE_OS::exit (1);
+ }
+
+ return 0;
+#else
+ ACE_UNUSED_ARG (remote_sap);
+ ACE_UNUSED_ARG (backlog);
+ ACE_UNUSED_ARG (params);
+#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2 */
+}
+
+int
+ACE_ATM_Acceptor::accept (ACE_ATM_Stream &new_sap,
+ ACE_Addr *remote_addr,
+ ACE_Time_Value *timeout,
+ int restart,
+ int reset_new_handle,
+ ACE_ATM_Params params,
+ ACE_ATM_QoS qos)
+{
+ ACE_TRACE ("ACE_ATM_Acceptor::accept");
+#if defined (ACE_HAS_FORE_ATM_XTI)
+ ATM_QoS optbuf = qos.get_qos();
+
+ return (acceptor_.accept(new_sap.get_stream(),
+ remote_addr,
+ timeout,
+ restart,
+ reset_new_handle,
+ params.get_rw_flag(),
+ params.get_user_data(),
+ &optbuf));
+#elif defined (ACE_HAS_FORE_ATM_WS2)
+// return (acceptor_.accept(new_sap.get_stream(),
+// remote_addr,
+// timeout,
+// restart,
+// reset_new_handle));
+ ACE_HANDLE n_handle;
+ ACE_HANDLE s_handle = (( ACE_SOCK_Acceptor *) this ) -> get_handle();
+ struct sockaddr_atm *cli_addr
+ = ( struct sockaddr_atm *)remote_addr -> get_addr();
+ int caddr_len = sizeof( struct sockaddr_atm );
+
+ do {
+ n_handle = ACE_OS::accept( s_handle,
+ ACE_reinterpret_cast( struct sockaddr *,
+ cli_addr ),
+ &caddr_len );
+ } while ( n_handle == ACE_INVALID_HANDLE && errno == EINTR );
+
+ (( ACE_ATM_Addr *)remote_addr ) -> set( cli_addr,
+ (( ACE_ATM_Addr *)remote_addr ) -> get_selector());
+ (( ACE_IPC_SAP *)&new_sap ) -> set_handle( n_handle );
+
+ return 0;
+#else
+ ACE_UNUSED_ARG(new_sap);
+ ACE_UNUSED_ARG(remote_addr);
+ ACE_UNUSED_ARG(timeout);
+ ACE_UNUSED_ARG(restart);
+ ACE_UNUSED_ARG(reset_new_handle);
+ ACE_UNUSED_ARG(params);
+ ACE_UNUSED_ARG(qos);
+ return (0);
+#endif /* ACE_HAS_FORE_ATM_XTI */
+}
+
#endif /* ACE_HAS_ATM */
+
diff --git a/ace/ATM_Acceptor.h b/ace/ATM_Acceptor.h
index 6b8158d7a01..3b4eb010a64 100644
--- a/ace/ATM_Acceptor.h
+++ b/ace/ATM_Acceptor.h
@@ -1,7 +1,6 @@
/* -*- C++ -*- */
// $Id$
-
// ============================================================================
//
// = LIBRARY
@@ -18,15 +17,15 @@
#ifndef ACE_ATM_ACCEPTOR_H
#define ACE_ATM_ACCEPTOR_H
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
#include "ace/Time_Value.h"
#include "ace/ATM_Stream.h"
#include "ace/ATM_Params.h"
#include "ace/ATM_QoS.h"
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
#if defined (ACE_HAS_ATM)
#if defined (ACE_HAS_FORE_ATM_WS2)
@@ -45,6 +44,7 @@ class ACE_Export ACE_ATM_Acceptor
// = DESCRIPTION
// This class wraps up the ACE_SOCK_Acceptor and ACE_TLI_Acceptor
// to make the mechanism for the ATM protocol transparent.
+
public:
// = Initialization and termination methods.
ACE_ATM_Acceptor (void);
@@ -74,10 +74,14 @@ public:
int reset_new_handle = 0,
ACE_ATM_Params params = ACE_ATM_Params(),
ACE_ATM_QoS qos = ACE_ATM_QoS());
+
// Accept a new data transfer connection. A <timeout> of 0 means
// block forever, a <timeout> of {0, 0} means poll. <restart> == 1
// means "restart if interrupted."
+ int get_local_addr( ACE_ATM_Addr &local_addr );
+ // Get the local address currently listening on
+
// = Meta-type info
typedef ACE_ATM_Addr PEER_ADDR;
typedef ACE_ATM_Stream PEER_STREAM;
@@ -98,3 +102,4 @@ private:
#endif /* ACE_HAS_ATM */
#endif /* ACE_ATM_ACCEPTOR_H */
+
diff --git a/ace/ATM_Acceptor.i b/ace/ATM_Acceptor.i
index 64cd5c562e5..55aa1568d05 100644
--- a/ace/ATM_Acceptor.i
+++ b/ace/ATM_Acceptor.i
@@ -1,37 +1,7 @@
-/* -*- C++ -*- */
// $Id$
// ATM_Acceptor.i
-
-ACE_INLINE
-ACE_HANDLE
-ACE_ATM_Acceptor::open (const ACE_Addr &remote_sap,
- int backlog,
- ACE_ATM_Params params)
-{
- ACE_TRACE ("ACE_ATM_Acceptor::open");
-#if defined (ACE_HAS_FORE_ATM_XTI)
- ACE_HANDLE handle = acceptor_.open (remote_sap,
- params.get_reuse_addr(),
- params.get_oflag(),
- params.get_info(),
- backlog,
- params.get_device());
- return (handle == ACE_INVALID_HANDLE ? -1 : 0);
-#elif defined (ACE_HAS_FORE_ATM_WS2)
- return (acceptor_.open (remote_sap,
- params.get_reuse_addr(),
- params.get_protocol_family(),
- backlog,
- params.get_protocol()));
-#else
- ACE_UNUSED_ARG (remote_sap);
- ACE_UNUSED_ARG (backlog);
- ACE_UNUSED_ARG (params);
-#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2 */
-}
-
ACE_INLINE
ACE_ATM_Acceptor::ACE_ATM_Acceptor (const ACE_Addr &remote_sap,
int backlog,
@@ -54,42 +24,4 @@ ACE_ATM_Acceptor::close (void)
#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */
}
-ACE_INLINE
-int
-ACE_ATM_Acceptor::accept (ACE_ATM_Stream &new_sap,
- ACE_Addr *remote_addr,
- ACE_Time_Value *timeout,
- int restart,
- int reset_new_handle,
- ACE_ATM_Params params,
- ACE_ATM_QoS qos)
-{
- ACE_TRACE ("ACE_ATM_Acceptor::accept");
-#if defined (ACE_HAS_FORE_ATM_XTI)
- ATM_QoS optbuf = qos.get_qos();
-
- return (acceptor_.accept(new_sap.get_stream(),
- remote_addr,
- timeout,
- restart,
- reset_new_handle,
- params.get_rw_flag(),
- params.get_user_data(),
- &optbuf));
-#elif defined (ACE_HAS_FORE_ATM_WS2)
- return (acceptor_.accept(new_sap.get_stream(),
- remote_addr,
- timeoutm
- restart,
- reset_new_handle));
-#else
- ACE_UNUSED_ARG(new_sap);
- ACE_UNUSED_ARG(remote_addr);
- ACE_UNUSED_ARG(timeout);
- ACE_UNUSED_ARG(restart);
- ACE_UNUSED_ARG(reset_new_handle);
- ACE_UNUSED_ARG(params);
- ACE_UNUSED_ARG(qos);
- return (0);
-#endif /* ACE_HAS_FORE_ATM_XTI */
-}
+
diff --git a/ace/ATM_Addr.cpp b/ace/ATM_Addr.cpp
index 372eb573d0a..bd91e880bd0 100644
--- a/ace/ATM_Addr.cpp
+++ b/ace/ATM_Addr.cpp
@@ -5,6 +5,10 @@
#define ACE_BUILD_DLL
#include "ace/ATM_Addr.h"
+#if defined (ACE_HAS_FORE_ATM_WS2)
+#include "forews2.h"
+#endif /* ACE_HAS_FORE_ATM_WS2 */
+
#if !defined (__ACE_INLINE__)
#include "ace/ATM_Addr.i"
#endif /* __ACE_INLINE__ */
@@ -72,6 +76,7 @@ ACE_ATM_Addr::ACE_ATM_Addr (const ATM_Addr *sap,
this->set (sap, selector);
}
+
ACE_ATM_Addr::ACE_ATM_Addr (const ASYS_TCHAR sap[],
unsigned char selector)
#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2)
@@ -114,6 +119,7 @@ ACE_ATM_Addr::init (unsigned char selector)
BHLI_MAGIC,
sizeof atm_addr_.sap.t_atm_sap_appl.ID);
#elif defined (ACE_HAS_FORE_ATM_WS2)
+ ACE_OS::memset(( void *)&atm_addr_, 0, sizeof atm_addr_ );
atm_addr_.satm_number.Addr[ ATM_ADDR_SIZE - 1 ] = ( char )selector;
atm_addr_.satm_family = AF_ATM;
atm_addr_.satm_number.AddressType = ATM_NSAP;
@@ -122,7 +128,7 @@ ACE_ATM_Addr::init (unsigned char selector)
atm_addr_.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT;
atm_addr_.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT;
- // N2K the correspondence (Ruibiao)
+ // Need to know the correspondence.
//atm_addr_.sap.t_atm_sap_appl.SVE_tag = (int8_t) T_ATM_PRESENT;
//atm_addr_.sap.t_atm_sap_appl.ID_type = (u_int8_t) T_ATM_USER_APP_ID;
//ACE_OS::memcpy (atm_addr_.sap.t_atm_sap_appl.ID.user_defined_ID,
@@ -180,6 +186,7 @@ ACE_ATM_Addr::set (const ASYS_TCHAR address[],
unsigned char selector)
{
ACE_TRACE ("ACE_ATM_Addr::set");
+ int ret;
this->init (selector);
@@ -187,7 +194,10 @@ ACE_ATM_Addr::set (const ASYS_TCHAR address[],
atm_addr_.sap.t_atm_sap_addr.SVE_tag_addr =
(int8_t) T_ATM_PRESENT;
#endif /* ACE_HAS_FORE_ATM_XTI */
- return this->string_to_addr (address);
+
+ ret = this -> string_to_addr( address );
+ this -> set_selector( selector );
+ return ret;
}
// Transform the string into the current addressing format.
@@ -225,9 +235,11 @@ ACE_ATM_Addr::string_to_addr (const ASYS_TCHAR sap[])
nsap->atmnsap,
ATMNSAP_ADDR_LEN);
}
- else
+ else {
+ errno = EINVAL;
+ return -1;
+ }
#elif defined (ACE_HAS_FORE_ATM_WS2)
- // WinSock2 part (Ruibiao)
DWORD dwValue;
HANDLE hLookup;
WSAQUERYSETW qsRestrictions;
@@ -235,11 +247,11 @@ ACE_ATM_Addr::string_to_addr (const ASYS_TCHAR sap[])
WCHAR tmpWStr[100];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, sap, -1, tmpWStr, 100);
-
+
csaBuffer.LocalAddr.iSockaddrLength = sizeof (struct sockaddr_atm);
- csaBuffer.LocalAddr.lpSockaddr = (struct sockaddr *)atm_addr_;
+ csaBuffer.LocalAddr.lpSockaddr = (struct sockaddr *)&atm_addr_;
csaBuffer.RemoteAddr.iSockaddrLength = sizeof (struct sockaddr_atm);
- csaBuffer.RemoteAddr.lpSockaddr = (struct sockaddr *) atm_addr;
+ csaBuffer.RemoteAddr.lpSockaddr = (struct sockaddr *)&atm_addr_;
qsRestrictions.dwSize = sizeof (WSAQUERYSETW);
qsRestrictions.lpszServiceInstanceName = NULL;
@@ -256,27 +268,35 @@ ACE_ATM_Addr::string_to_addr (const ASYS_TCHAR sap[])
qsRestrictions.lpcsaBuffer = &csaBuffer;
qsRestrictions.lpBlob = NULL; //&blob;
- if (WSALookupServiceBeginW(&qsRestrictions, LUP_RETURN_ALL, &hLookup) == SOCKET_ERROR) {
- ACE_OS::printf("Error: WSALookupServiceBeginW failed! %d\n",WSAGetLastError());
+ if ( ::WSALookupServiceBeginW(&qsRestrictions, LUP_RETURN_ALL, &hLookup)
+ == SOCKET_ERROR) {
+ ACE_OS::printf( "Error: WSALookupServiceBeginW failed! %d\n",
+ ::WSAGetLastError());
return -1;
}
dwValue = sizeof (WSAQUERYSETW);
- if (WSALookupServiceNextW ( hLookup, 0, &dwValue, &qsRestrictions) == SOCKET_ERROR) {
- ACE_OS::printf ("Error: WSALookupServiceNextW failed! %d\n", WSAGetLastError());
- return -1;
+ if ( ::WSALookupServiceNextW( hLookup, 0, &dwValue, &qsRestrictions)
+ == SOCKET_ERROR) {
+ if ( WSAGetLastError() != WSA_E_NO_MORE ) {
+ ACE_OS::printf( "Error: WSALookupServiceNextW failed! %d\n",
+ ::WSAGetLastError());
+ return -1;
+ }
}
if (WSALookupServiceEnd (hLookup) == SOCKET_ERROR) {
- ACE_OS::printf("Error : WSALookupServiceEnd failed! %d \n", WSAGetLastError());
+ ACE_OS::printf( "Error : WSALookupServiceEnd failed! %d \n",
+ ::WSAGetLastError());
+ errno = EINVAL;
+ return -1;
+ }
#else
ACE_UNUSED_ARG (sap);
+
+ return 0;
#endif /* ACE_HAS_FORE_ATM_XTI && ACE_HAS_FORE_ATM_WS2 */
- {
- errno = EINVAL;
- return -1;
- }
#if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2)
return 0;
@@ -311,16 +331,20 @@ ACE_ATM_Addr::addr_to_string (ASYS_TCHAR addr[],
return 0;
#elif defined (ACE_HAS_FORE_ATM_WS2)
- //WinSock2 part
ASYS_TCHAR buffer[MAXNAMELEN + 1];
int i;
if ( addrlen < ATM_ADDR_SIZE + 1 )
- return -1;
+ return -1;
+
+ for ( i = 0; i < ATM_ADDR_SIZE; i++ ) {
+ buffer[ i * 3 ] = '\0';
+ ACE_OS::sprintf( buffer, ASYS_TEXT( "%s%02x." ),
+ buffer,
+ atm_addr_.satm_number.Addr[ i ]);
+ }
- for ( i = 0; i < ATM_ADDR_SIZE; i++ )
- ACE_OS::sprintf( buffer, ASYS_TEXT( "%02x." ), atm_addr_.satm_number.Addr[ i ]);
- buffer[ ATM_ADDR_SIZE ] = '\0';
+ buffer[ ATM_ADDR_SIZE * 3 - 1 ] = '\0';
ACE_OS::strcpy( addr, buffer );
return 0;
@@ -410,8 +434,8 @@ ACE_ATM_Addr::dump (void) const
// {
// ACE_OS::t_error ("t_getinfo");
// return 0;
-// }
-
+// }
+
// buf = (char *) ACE_OS::malloc (info.options);
// if (buf == 0)
@@ -563,3 +587,4 @@ ACE_ATM_Addr::dump (void) const
// return 0;
// #endif /* ACE_HAS_FORE_ATM_XTI && ACE_HAS_FORE_ATM_WS2 */
// }
+
diff --git a/ace/ATM_Addr.h b/ace/ATM_Addr.h
index 360ef6eaa07..9ec40ed4347 100644
--- a/ace/ATM_Addr.h
+++ b/ace/ATM_Addr.h
@@ -1,4 +1,3 @@
-/* -*- C++ -*- */
// $Id$
// ============================================================================
@@ -18,18 +17,16 @@
#define ACE_ATM_ADDR_H
#include "ace/ACE.h"
+#include "ace/Addr.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
-#include "ace/Addr.h"
-
#if defined (ACE_HAS_FORE_ATM_XTI)
typedef ATMSAPAddress ATM_Addr;
#elif defined (ACE_HAS_FORE_ATM_WS2)
-#include <winsock2.h>
-#include <ws2atm.h>
+#define FORE_NAME_SPACE NS_ALL
typedef struct sockaddr_atm ATM_Addr;
#else
typedef int ATM_Addr;
@@ -81,7 +78,7 @@ public:
int set (const ATM_Addr *,
unsigned char selector = DEFAULT_SELECTOR);
- // Initializes an <ACE_ATM_Addr> from an ATMSAPAddress
+ // Initializes an <ACE_ATM_Addr> from an ATMSAPAddress/sockaddr_atm
// structure. This is vendor specific (FORE systems). May need to
// change when other vendors are supported.
@@ -136,8 +133,9 @@ public:
void dump (void) const;
// Dump the state of an object.
+
ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
+ // Declare the dynamic allocation hooks.
// char *construct_options (ACE_HANDLE fd,
// int qos_kb,
@@ -156,3 +154,4 @@ private:
#endif /* __ACE_INLINE__ */
#endif /* ACE_ATM_ADDR_H */
+
diff --git a/ace/ATM_Addr.i b/ace/ATM_Addr.i
index bb0a215ddc6..3b133b1a5aa 100644
--- a/ace/ATM_Addr.i
+++ b/ace/ATM_Addr.i
@@ -1,4 +1,3 @@
-/* -*- C++ -*- */
// $Id$
// ATM_Addr.i
@@ -37,9 +36,10 @@ ACE_ATM_Addr::set_selector (unsigned char selector)
ACE_TRACE ("ACE_ATM_Addr::set_selector");
#if defined (ACE_HAS_FORE_ATM_XTI)
atm_addr_.sap.t_atm_sap_addr.address[ATMNSAP_ADDR_LEN - 1] = selector;
-#elif defined (ACE_FORE_ATM_WS2)
+#elif defined (ACE_HAS_FORE_ATM_WS2)
atm_addr_.satm_number.Addr[ ATM_ADDR_SIZE - 1 ] = selector;
#else
ACE_UNUSED_ARG (selector);
#endif /* ACE_HAS_FORE_ATM_XTI && ACE_HAS_FORE_ATM_WS2 */
}
+
diff --git a/ace/ATM_Connector.cpp b/ace/ATM_Connector.cpp
index 2d4f03be550..496b2ff5a27 100644
--- a/ace/ATM_Connector.cpp
+++ b/ace/ATM_Connector.cpp
@@ -26,4 +26,82 @@ ACE_ATM_Connector::ACE_ATM_Connector (void)
ACE_TRACE ("ACE_ATM_Connector::ACE_ATM_Connector");
}
+// Actively connect and produce a new ACE_ATM_Stream if things go well...
+// Connect the <new_stream> to the <remote_sap>, waiting up to
+// <timeout> amount of time if necessary.
+
+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): 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();
+
+ ACE_QoS_Params qos_params = ACE_QoS_Params( 0, 0, &cqos, 0, 0 );
+
+ ACE_OS::printf( "ATM_Connector(connect): connecting...\n" );
+
+ int result = ACE_OS::connect( s,
+ ( struct sockaddr *)saddr,
+ sizeof( struct sockaddr_atm ),
+ qos_params );
+
+ if ( result != 0 )
+ ACE_OS::printf( "ATM_Connector(connect): connection failed, %d\n",
+ ::WSAGetLastError());
+
+ return result;
+#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 */
+}
+
#endif /* ACE_HAS_ATM */
+
diff --git a/ace/ATM_Connector.h b/ace/ATM_Connector.h
index b67b1bde63f..5a405d1b79f 100644
--- a/ace/ATM_Connector.h
+++ b/ace/ATM_Connector.h
@@ -46,11 +46,11 @@ public:
// Default constructor.
ACE_ATM_Connector (ACE_ATM_Stream &new_stream,
- const ACE_Addr &remote_sap,
+ const ACE_ATM_Addr &remote_sap,
ACE_ATM_Params params = ACE_ATM_Params(),
ACE_ATM_QoS options = ACE_ATM_QoS(),
ACE_Time_Value *timeout = 0,
- const ACE_Addr &local_sap = ACE_Addr::sap_any,
+ const ACE_ATM_Addr &local_sap = ACE_ATM_Addr( "", 0 ),
int reuse_addr = 0,
#if defined (ACE_WIN32)
int flags = 0,
@@ -69,16 +69,16 @@ public:
// *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>. The <local_sap> is the value of local address
- // to bind to. If it's the default value of <ACE_Addr::sap_any> then
+ // to bind to. If it's the default value of <ACE_ATM_Addr::sap_any> then
// the user is letting the OS do the binding. If <reuse_addr> == 1
// then the <local_addr> is reused, even if it hasn't been cleanedup yet.
connect (ACE_ATM_Stream &new_stream,
- const ACE_Addr &remote_sap,
+ const ACE_ATM_Addr &remote_sap,
ACE_ATM_Params params = ACE_ATM_Params(),
ACE_ATM_QoS options = ACE_ATM_QoS(),
ACE_Time_Value *timeout = 0,
- const ACE_Addr &local_sap = ACE_Addr::sap_any,
+ const ACE_ATM_Addr &local_sap = ACE_ATM_Addr( "", 0 ),
int reuse_addr = 0,
#if defined (ACE_WIN32)
int flags = 0,
@@ -97,12 +97,12 @@ public:
// *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>. The <local_sap> is the value of local address
- // to bind to. If it's the default value of <ACE_Addr::sap_any> then
+ // to bind to. If it's the default value of <ACE_ATM_Addr::sap_any> then
// the user is letting the OS do the binding. If <reuse_addr> == 1
// then the <local_addr> is reused, even if it hasn't been cleanedup yet.
int complete (ACE_ATM_Stream &new_stream,
- ACE_Addr *remote_sap,
+ ACE_ATM_Addr *remote_sap,
ACE_Time_Value *tv);
// Try to complete a non-blocking connection.
// If connection completion is successful then <new_stream> contains
@@ -142,3 +142,4 @@ private:
#endif /* ACE_HAS_ATM */
#endif /* ACE_ATM_CONNECTOR_H */
+
diff --git a/ace/ATM_Connector.i b/ace/ATM_Connector.i
index 54718b9b822..f67ca3414ca 100644
--- a/ace/ATM_Connector.i
+++ b/ace/ATM_Connector.i
@@ -5,91 +5,94 @@
ACE_INLINE
ACE_ATM_Connector::ACE_ATM_Connector (ACE_ATM_Stream &new_stream,
- const ACE_Addr &remote_sap,
+ const ACE_ATM_Addr &remote_sap,
ACE_ATM_Params params,
ACE_ATM_QoS options,
- ACE_Time_Value *timeout,
- const ACE_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 (this->connect (new_stream,
- remote_sap,
- params,
- options,
- timeout,
- local_sap,
- reuse_addr,
- flags,
- perms) == ACE_INVALID_HANDLE
+ if ((ACE_HANDLE)this->connect (new_stream,
+ remote_sap,
+ params,
+ options,
+ timeout,
+ local_sap,
+ reuse_addr,
+ 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")));
+ ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"),
+ 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_Addr &remote_sap,
- ACE_ATM_Params params,
- ACE_ATM_QoS options,
- ACE_Time_Value *timeout,
- const ACE_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)
- return connector_.connect(new_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 */
-}
+//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
int
ACE_ATM_Connector::complete (ACE_ATM_Stream &new_stream,
- ACE_Addr *remote_sap,
+ ACE_ATM_Addr *remote_sap,
ACE_Time_Value *tv)
{
ACE_TRACE ("ACE_ATM_Connector::complete");
@@ -119,10 +122,42 @@ 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);
+
+ SOCKET ns;
+ int len = sizeof( struct sockaddr_atm );
+ struct sockaddr_atm *laddr;
+ laddr = ( struct sockaddr_atm *)remote_sap.get_addr();
+
+ 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",
+ ::WSAGetLastError());
+ return -1;
+ }
+
+// ACE_HANDLE nah;
+
+// nah = ACE_OS::join_leaf( current_stream.get_handle(),
+// ( struct sockaddr *)remote_sap.get_addr(),
+// NULL );
+
+ return 0;
#else
- ACE_UNUSED_ARG(new_stream);
+ ACE_UNUSED_ARG(current_stream);
ACE_UNUSED_ARG(remote_sap);
- ACE_UNUSED_ARG(tv);
+ ACE_UNUSED_ARG(leaf_id);
+ ACE_UNUSED_ARG(timeout);
return 0;
#endif
}
diff --git a/ace/ATM_Params.cpp b/ace/ATM_Params.cpp
index 54a53ef03a1..b7e4c708888 100644
--- a/ace/ATM_Params.cpp
+++ b/ace/ATM_Params.cpp
@@ -20,3 +20,4 @@ ACE_ATM_Params::dump (void) const
}
#endif /* ACE_HAS_ATM */
+
diff --git a/ace/ATM_Params.h b/ace/ATM_Params.h
index 6f563db94ae..e6a6b0d3b11 100644
--- a/ace/ATM_Params.h
+++ b/ace/ATM_Params.h
@@ -1,4 +1,3 @@
-/* -*- C++ -*- */
// $Id$
// ============================================================================
@@ -29,10 +28,16 @@
#include "ace/TLI.h"
typedef struct t_info Param_Info;
typedef struct netbuf Param_Udata;
+#elif defined (ACE_HAS_FORE_ATM_WS2)
+#include "ace/SOCK.h"
+#define ACE_XTI_ATM_DEVICE ""
+typedef int Param_Info;
+typedef int Param_Udata;
#else
+#define ACE_XTI_ATM_DEVICE ""
typedef int Param_Info;
typedef int Param_Udata;
-#endif
+#endif /* ACE_HAS_FORE_ATM_XTI && ACE_HAS_FORE_ATM_WS2 */
class ACE_Export ACE_ATM_Params
{
@@ -45,14 +50,20 @@ public:
Param_Info *info = 0,
Param_Udata *udata = 0,
int oflag = O_RDWR,
- int protocol_family = PF_INET,
- int protocol = 0,
- int type = 0,
+ int protocol_family = AF_ATM,
+ int protocol = ATMPROTO_AAL5,
+ int type = SOCK_RAW,
+ ACE_Protocol_Info *protocol_info = 0,
+ ACE_SOCK_GROUP g = 0,
+ u_long flags
+ = ACE_FLAG_MULTIPOINT_C_ROOT
+ | ACE_FLAG_MULTIPOINT_D_ROOT, // connector by default
int reuse_addr = 0);
// Initialize the data members. This class combines options from
- // ACE_SOCK_Connector (<protocol_family> and <protocol>) and
- // ACE_TLI_Connector (<device>, <info>, <rw_flag>, <oflag>, and <udata>)
- // so that either mechanism can be used transparently for ATM.
+ // ACE_SOCK_Connector (<protocol_family>, <protocol>, <type>,
+ // <protocol_info>, <group>, and <flags>) and
+ // ACE_TLI_Connector (<device>, <info>, <rw_flag>, <oflag>, and <udata>)
+ // so that either mechanism can be used transparently for ATM.
~ACE_ATM_Params ();
@@ -68,6 +79,18 @@ public:
void set_type (int);
// Get/set type.
+ ACE_Protocol_Info *get_protocol_info( void );
+ void set_protocol_info( ACE_Protocol_Info *);
+ // Get/set protocol info.
+
+ ACE_SOCK_GROUP get_sock_group( void );
+ void set_sock_group( ACE_SOCK_GROUP );
+ // Get/set socket group.
+
+ u_long get_flags( void );
+ void set_flags( u_long );
+ // Get/set socket flags.
+
int get_reuse_addr (void) const;
void set_reuse_addr (int);
// Get/set reuse_addr flag.
@@ -107,10 +130,18 @@ private:
int type_;
// Type for opening sockets.
+ ACE_Protocol_Info *protocol_info_;
+ // Information about the protocol.
+
+ ACE_SOCK_GROUP group_;
+ // Socket group used (for sockets only).
+
+ u_long flags_;
+ // Flags for sockets (for sockets only).
+
int reuse_addr_;
// Flag for reusing address for opening sockets.
-
const char *device_;
// Device name for XTI/ATM connections.
@@ -132,5 +163,5 @@ private:
#endif /* __ACE_INLINE__ */
#endif /* ACE_HAS_ATM */
-
#endif /* ACE_ATM_PARAMS_H */
+
diff --git a/ace/ATM_Params.i b/ace/ATM_Params.i
index 2c6ecea2f8a..43bce9f0a42 100644
--- a/ace/ATM_Params.i
+++ b/ace/ATM_Params.i
@@ -1,4 +1,3 @@
-/* -*- C++ -*- */
// $Id$
// ATM_Params.i
@@ -12,10 +11,16 @@ ACE_ATM_Params::ACE_ATM_Params (int rw_flag,
int protocol_family,
int protocol,
int type,
+ ACE_Protocol_Info *protocol_info,
+ ACE_SOCK_GROUP g,
+ u_long flags,
int reuse_addr)
: protocol_family_(protocol_family),
protocol_(protocol),
type_(type),
+ protocol_info_(protocol_info),
+ group_(g),
+ flags_(flags),
reuse_addr_(reuse_addr),
device_(device),
info_(info),
@@ -82,6 +87,54 @@ ACE_ATM_Params::set_type (int type)
}
ACE_INLINE
+ACE_Protocol_Info*
+ACE_ATM_Params::get_protocol_info( void )
+{
+ ACE_TRACE ("ACE_ATM_Params::get_protocol_info");
+ return protocol_info_;
+}
+
+ACE_INLINE
+void
+ACE_ATM_Params::set_protocol_info( ACE_Protocol_Info *protocol_info )
+{
+ ACE_TRACE ("ACE_ATM_Params::set_protocol_info");
+ protocol_info_ = protocol_info;
+}
+
+ACE_INLINE
+ACE_SOCK_GROUP
+ACE_ATM_Params::get_sock_group( void )
+{
+ ACE_TRACE ("ACE_ATM_Params::get_sock_group");
+ return group_;
+}
+
+ACE_INLINE
+void
+ACE_ATM_Params::set_sock_group( ACE_SOCK_GROUP g )
+{
+ ACE_TRACE ("ACE_ATM_Params::set_sock_group");
+ group_ = g;
+}
+
+ACE_INLINE
+u_long
+ACE_ATM_Params::get_flags( void )
+{
+ ACE_TRACE ("ACE_ATM_Params::get_flags");
+ return flags_;
+}
+
+ACE_INLINE
+void
+ACE_ATM_Params::set_flags( u_long flags)
+{
+ ACE_TRACE ("ACE_ATM_Params::set_flags");
+ flags_ = flags;
+}
+
+ACE_INLINE
int
ACE_ATM_Params::get_reuse_addr (void) const
{
@@ -168,3 +221,4 @@ ACE_ATM_Params::set_oflag (int oflag)
ACE_TRACE ("ACE_ATM_Params::set_oflag");
oflag_ = oflag;
}
+
diff --git a/ace/ATM_QoS.cpp b/ace/ATM_QoS.cpp
index c86c661b2d8..747098034ab 100644
--- a/ace/ATM_QoS.cpp
+++ b/ace/ATM_QoS.cpp
@@ -27,27 +27,147 @@ const int ACE_ATM_QoS::DEFAULT_SELECTOR = 0x0;
ACE_ALLOC_HOOK_DEFINE(ACE_ATM_QoS)
-void
-ACE_ATM_QoS::dump (void) const
-{
- ACE_TRACE ("ACE_ATM_QoS::dump");
-}
-
-void
-ACE_ATM_QoS::set_rate (ACE_HANDLE fd,
- int rate,
- int flags)
+ACE_ATM_QoS::ACE_ATM_QoS( int rate )
{
- ACE_TRACE ("ACE_ATM_QoS::set_rate");
+ ACE_TRACE( "ACE_ATM_QoS::ACE_ATM_QoS" );
#if defined (ACE_HAS_FORE_ATM_WS2)
- ACE_UNUSED_ARG (rate);
+ 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;
+
+ // Setting up cbr parameters ...
+ ie_aalparams.AALType = AALTYPE_5;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize
+ = 1516; //8096;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize
+ = 1516; //8096;
+ 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);
+
+ 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_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 );
+
+ 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);
+
+ qos_.ProviderSpecific.buf = (char *) ACE_OS::malloc(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 );
+ 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 );
+ 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 );
+ 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 );
+ 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;
+
+ ACE_Flow_Spec send_fspec( 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 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 );
+ qos_.receiving_flowspec( recv_fspec );
#elif defined (ACE_HAS_FORE_ATM_XTI)
- long optlen = 0;
- qos_.buf = construct_options(fd,
- rate,
- flags,
- &optlen);
- qos_.len = optlen;
+ ACE_UNUSED_ARG (rate);
#else
ACE_UNUSED_ARG (rate);
#endif /* ACE_HAS_FORE_ATM_WS2 */
@@ -60,111 +180,143 @@ ACE_ATM_QoS::set_cbr_rate (int rate)
#if defined (ACE_HAS_FORE_ATM_WS2)
AAL_PARAMETERS_IE ie_aalparams;
ATM_TRAFFIC_DESCRIPTOR_IE ie_td;
- ATM_BROADBAND_BEARER_CAPBILITY_IE ie_bbc;
+ ATM_BROADBAND_BEARER_CAPABILITY_IE ie_bbc;
ATM_QOS_CLASS_IE ie_qos;
Q2931_IE *ie_ptr;
int size;
- ie_aalparams.AALType = AALTYPE_5;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize =
- 1516;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize =
- 1516;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
- ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;
+ ACE_OS::printf( "ATM_QoS(set_cbr_rate): set rate to %d c/s\n", rate );
- size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_IE);
+ // Setting up cbr parameters ...
+ ie_aalparams.AALType = AALTYPE_5;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.ForwardMaxCPCSSDUSize
+ = 1516; //8096;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.BackwardMaxCPCSSDUSize
+ = 1516; //8096;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.Mode = AAL5_MODE_MESSAGE;
+ ie_aalparams.AALSpecificParameters.AAL5Parameters.SSCSType = AAL5_SSCS_NULL;
- ie_td.Forward.PeakCellRate_CLP0 = SAP_FIELD_ABSENT;
- ie_td.Forward.PeakCellRate_CLP01 = cellRate;
- 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 = cellRate;
- 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;
-
- size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG)
- + sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE);
-
- ie_qos.QOSClassForward = QOS_CLASS1;
- ie_qos.QOSClassBackward = QOS_CLASS1;
-
- size += sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(ATM_QOS_CLASS_IE);
-
- qos_.ProviderSpecific.buf = (char *) malloc(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);
- 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);
- 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);
- ACE_OS::memcpy(ie_ptr->IE,
- &ie_bbc,
- sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE));
+ size = sizeof(Q2931_IE_TYPE) + sizeof(ULONG) + sizeof(AAL_PARAMETERS_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 = -1;
- qos_.SendingFlowspec.TokenBucketSize = -1;
- qos_.SendingFlowspec.PeakBandwidth = -1;
- qos_.SendingFlowspec.Latency = -1;
- qos_.SendingFlowspec.DelayVariation = -1;
- qos_.SendingFlowspec.LevelOfGuarantee = BestEffortService;
- // will most probably be ignored by the service provider
- qos_.SendingFlowspec.CostOfCall = 0;
-
- qos_.ReceivingFlowspec.TokenRate = -1;
- qos_.ReceivingFlowspec.TokenBucketSize = -1;
- qos_.ReceivingFlowspec.PeakBandwidth = -1;
- qos_.ReceivingFlowspec.Latency = -1;
- qos_.ReceivingFlowspec.DelayVariation = -1;
- qos_.ReceivingFlowspec.LevelOfGuarantee = BestEffortService;
- // will most probably be ignored by the service provider
- qos_.ReceivingFlowspec.CostOfCall = 0;
+ 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_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);
+
+ 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);
+
+ qos_.ProviderSpecific.buf = (char *) ACE_OS::malloc(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 );
+ 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 );
+ 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 );
+ 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);
+ 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;
+
+ ACE_Flow_Spec send_fspec( 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 0xffffffff,
+ 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 );
+ qos_.receiving_flowspec( recv_fspec );
#elif defined (ACE_HAS_FORE_ATM_XTI)
ACE_UNUSED_ARG (rate);
#else
@@ -172,6 +324,35 @@ ACE_ATM_QoS::set_cbr_rate (int rate)
#endif /* ACE_HAS_FORE_ATM_WS2 */
}
+void
+ACE_ATM_QoS::dump (void) const
+{
+ ACE_TRACE ("ACE_ATM_QoS::dump");
+}
+
+void
+ACE_ATM_QoS::set_rate (ACE_HANDLE fd,
+ int rate,
+ int flags)
+{
+ ACE_TRACE ("ACE_ATM_QoS::set_rate");
+#if defined (ACE_HAS_FORE_ATM_WS2)
+ set_cbr_rate( rate );
+
+ ACE_UNUSED_ARG( fd );
+ ACE_UNUSED_ARG( flags );
+#elif defined (ACE_HAS_FORE_ATM_XTI)
+ long optlen = 0;
+ qos_.buf = construct_options(fd,
+ rate,
+ flags,
+ &optlen);
+ qos_.len = optlen;
+#else
+ ACE_UNUSED_ARG (rate);
+#endif /* ACE_HAS_FORE_ATM_WS2 */
+}
+
char*
ACE_ATM_QoS::construct_options (ACE_HANDLE fd,
int rate,
@@ -181,7 +362,7 @@ ACE_ATM_QoS::construct_options (ACE_HANDLE fd,
#if defined (ACE_HAS_FORE_ATM_WS2)
ACE_UNUSED_ARG (fd);
ACE_UNUSED_ARG (rate);
- ACE_UNUSED_ARG (flag);
+ ACE_UNUSED_ARG (flags);
ACE_UNUSED_ARG (len);
return (0);
#elif defined (ACE_HAS_FORE_ATM_XTI)
@@ -195,13 +376,13 @@ ACE_ATM_QoS::construct_options (ACE_HANDLE fd,
ACE_OS::t_error ("t_getinfo");
return 0;
}
-
- buf = (char *) ACE_OS::malloc (info.options);
- if (buf == 0)
+ buf = (char *) ACE_OS::malloc (info.options);
+
+ 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;
@@ -344,7 +525,7 @@ ACE_ATM_QoS::construct_options (ACE_HANDLE fd,
popt = T_OPT_NEXTHDR (buf, info.options, popt);
}
- // return actual size of options and option buffer to user
+ // Return actual size of options and option buffer to user.
*len = (char *) popt - buf;
return buf;
@@ -358,3 +539,4 @@ ACE_ATM_QoS::construct_options (ACE_HANDLE fd,
}
#endif /* ACE_HAS_ATM */
+
diff --git a/ace/ATM_QoS.h b/ace/ATM_QoS.h
index 57f3b257c6d..92f7007c554 100644
--- a/ace/ATM_QoS.h
+++ b/ace/ATM_QoS.h
@@ -1,7 +1,6 @@
/* -*- C++ -*- */
// $Id$
-
// ============================================================================
//
// = LIBRARY
@@ -28,7 +27,7 @@
#if defined (ACE_HAS_FORE_ATM_WS2)
// just map to WS2 GQOS struct
-typedef QOS ATM_QoS;
+typedef ACE_QoS ATM_QoS;
#elif defined (ACE_HAS_FORE_ATM_XTI)
// typedef enum {
// BEST_EFFORT,
@@ -80,23 +79,29 @@ public:
// = Initializattion and termination methods.
ACE_ATM_QoS ();
- // Default constructor
+ // Default constructor.
+
+ ACE_ATM_QoS( int );
+ // Constructor with a CBR rate.
~ACE_ATM_QoS ();
void set_rate (ACE_HANDLE,
int,
int);
- // set the rate
+ // Set the rate.
void set_cbr_rate (int);
- // set CBR rate
+ // Set CBR rate.
ATM_QoS get_qos (void);
- // get ATM_QoS struct
+ // Get ATM_QoS struct.
+
+ ACE_QoS_Params get_option_params( void );
+ // Get ACE QoS option parameters.
- void dump (void) const;
- // Dump the state of an object.
+ void dump (void) const;
+ // Dump the state of an object.
ACE_ALLOC_HOOK_DECLARE;
// Declare the dynamic allocation hooks.
@@ -106,7 +111,7 @@ protected:
int,
int,
long*);
- // Construct QoS options
+ // Construct QoS options.
private:
ATM_QoS qos_;
@@ -118,3 +123,4 @@ private:
#endif /* ACE_HAS_ATM */
#endif /* ACE_ATM_QoS_H */
+
diff --git a/ace/ATM_QoS.i b/ace/ATM_QoS.i
index ed6dff5d803..dddfca2665e 100644
--- a/ace/ATM_QoS.i
+++ b/ace/ATM_QoS.i
@@ -1,4 +1,3 @@
-/* -*- C++ -*- */
// $Id$
// ATM_QoS.i
@@ -22,3 +21,12 @@ ACE_ATM_QoS::get_qos (void)
ACE_TRACE ("ACE_ATM_QoS::get_qos");
return qos_;
}
+
+ACE_INLINE
+ACE_QoS_Params
+ACE_ATM_QoS::get_option_params(void)
+{
+ ACE_TRACE( "ACE_ATM_QoS::get_option_params" );
+ return ACE_QoS_Params( 0, 0, &qos_, 0, 0 );
+}
+
diff --git a/ace/ATM_Stream.cpp b/ace/ATM_Stream.cpp
index f00e1aafc6a..9564c98a875 100644
--- a/ace/ATM_Stream.cpp
+++ b/ace/ATM_Stream.cpp
@@ -28,12 +28,14 @@ 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);
+// 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);
@@ -49,6 +51,7 @@ ACE_ATM_Stream::get_peer_name (void) const
#error "This doesn't seem to work. May need to jimmy-rig something with the"
#error "/etc/xti_hosts file - Ugh!"
+
ACE_ATM_Addr sa;
struct netbuf name;
name.maxlen = sa.get_size ();
@@ -60,21 +63,38 @@ ACE_ATM_Stream::get_peer_name (void) const
return (name.buf);
#elif defined (ACE_HAS_FORE_ATM_WS2)
- // Use getpeername for WinSock2
- struct sockaddr name;
- socklen_t nameSize = sizeof(name);
+ // Use getpeername for WinSock2.
+ struct sockaddr_in name;
+ int nameSize = sizeof(name);
+ struct hostent *peerhost;
+
if (ACE_OS::getpeername(this->get_handle (),
- &name,
+ (struct sockaddr *) &name,
&nameSize) != 0)
{
return 0;
}
- return ??
+ peerhost = ACE_OS::gethostbyaddr(( char *)name.sin_addr.S_un.S_addr,
+ sizeof( unsigned long ),
+ PF_INET );
+
+ return peerhost -> h_name;
#else
return 0;
#endif /* ACE_HAS_FORE_ATM_XTI */
}
+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 stream_.get_handle ();
+#else
+ return 0;
+#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 */
+}
+
int
ACE_ATM_Stream::get_vpi_vci (ACE_UINT16 &vpi,
ACE_UINT16 &vci) const
@@ -154,9 +174,30 @@ ACE_ATM_Stream::get_vpi_vci (ACE_UINT16 &vpi,
vci = conn_prop.vci;
return (0);
#elif defined (ACE_HAS_FORE_ATM_WS2)
+ ATM_CONNECTION_ID connID;
+ 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) {
+ ACE_OS::printf("Error: WSAIoctl %d\n", WSAGetLastError());
+ }
+
+ vpi = ( ACE_UINT16 )connID.VPI;
+ vci = ( ACE_UINT16 )connID.VCI;
+
+ return 0;
#else
return (-1);
#endif /* ACE_HAS_FORE_ATM_XTI */
}
#endif /* ACE_HAS_ATM */
+
diff --git a/ace/ATM_Stream.h b/ace/ATM_Stream.h
index 2e48f4b6b42..58b7913acf2 100644
--- a/ace/ATM_Stream.h
+++ b/ace/ATM_Stream.h
@@ -1,7 +1,6 @@
/* -*- C++ -*- */
// $Id$
-
// ============================================================================
//
// = LIBRARY
@@ -18,13 +17,13 @@
#ifndef ACE_ATM_STREAM_H
#define ACE_ATM_STREAM_H
-#include "ace/ATM_Addr.h"
-#include "ace/ATM_Params.h"
-
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "ace/ATM_Addr.h"
+#include "ace/ATM_Params.h"
+
#if defined (ACE_HAS_ATM)
#if defined (ACE_WIN32)
@@ -66,12 +65,12 @@ public:
ssize_t recv (void *buf,
size_t n,
int *flags = 0) const;
- // Recv an n byte buffer from the connected transport mechanism
+ // Recv an n byte buffer from the connected transport mechanism.
ssize_t send_n (const void *buf,
size_t n,
int flags) const;
- // Send exactly n bytes to the connected transport mechanism
+ // Send exactly n bytes to the connected transport mechanism.
// = Meta-type info
typedef ACE_ATM_Addr PEER_ADDR;
@@ -84,7 +83,7 @@ public:
private:
ATM_Stream stream_;
- // Typedef'd to the appropriate stream mechanism above
+ // Typedef'd to the appropriate stream mechanism above.
};
#if defined (__ACE_INLINE__)
@@ -93,3 +92,4 @@ private:
#endif /* ACE_HAS_ATM */
#endif /* ACE_ATM_STREAM_H */
+
diff --git a/ace/ATM_Stream.i b/ace/ATM_Stream.i
index ab7c8804f68..f0f42d47b6b 100644
--- a/ace/ATM_Stream.i
+++ b/ace/ATM_Stream.i
@@ -1,8 +1,9 @@
-/* -*- C++ -*- */
// $Id$
// ATM_Stream.i
+#include "ace/ATM_Stream.h"
+
ACE_INLINE
ACE_ATM_Stream::ACE_ATM_Stream (void)
{
@@ -20,9 +21,14 @@ ACE_ATM_Stream::open (ACE_ATM_Params params)
params.get_info());
return (handle == ACE_INVALID_HANDLE ? -1 : 0);
#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());
#else
ACE_UNUSED_ARG(params);
@@ -42,17 +48,17 @@ 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 stream_.get_handle ();
-#else
- return 0;
-#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&
@@ -106,3 +112,4 @@ ACE_ATM_Stream::send_n (const void *buf,
return (0);
#endif /* ACE_HAS_FORE_ATM_XTI */
}
+