diff options
author | joeh <joeh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-05-24 14:58:42 +0000 |
---|---|---|
committer | joeh <joeh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-05-24 14:58:42 +0000 |
commit | 35dce870d8bad70fceb1009903690294cb6654ed (patch) | |
tree | b119c05b306fc054c054d13a68414805125566b9 /ace/ATM_Connector.cpp | |
parent | 983acdffb2500622dd3166e53693a6536a1331eb (diff) | |
download | ATCD-35dce870d8bad70fceb1009903690294cb6654ed.tar.gz |
Adding support for ATM on Linux. (Thanks to Pedro Brandao <pbrandao@inescn.pt>)
Diffstat (limited to 'ace/ATM_Connector.cpp')
-rw-r--r-- | ace/ATM_Connector.cpp | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/ace/ATM_Connector.cpp b/ace/ATM_Connector.cpp index 07a5b77b085..23971012d26 100644 --- a/ace/ATM_Connector.cpp +++ b/ace/ATM_Connector.cpp @@ -12,9 +12,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"); @@ -55,15 +55,21 @@ ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream, params.get_user_data(), &options.get_qos()); #elif defined (ACE_HAS_FORE_ATM_WS2) - ACE_OS::printf( "ATM_Connector(connect): set QoS parameters\n" ); + ACE_DEBUG(LM_DEBUG, + ASYS_TEXT("ATM_Connector(connect): set QoS parameters\n" )); 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" ); + ACE_QoS_Params qos_params = ACE_QoS_Params(0, + 0, + &cqos, + 0, + 0); + + ACE_DEBUG(LM_DEBUG, + ASYS_TEXT("ATM_Connector(connect): connecting...\n")); int result = ACE_OS::connect( s, ( struct sockaddr *)saddr, @@ -75,6 +81,48 @@ ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream, ::WSAGetLastError()); return result; +#elif defined (ACE_HAS_LINUX_ATM) + ACE_UNUSED_ARG (params); + ACE_UNUSED_ARG (timeout); + ACE_UNUSED_ARG (reuse_addr); + ACE_UNUSED_ARG (perms); + ACE_UNUSED_ARG (flags); + + ACE_HANDLE handle = new_stream.get_handle(); + ATM_QoS qos =options.get_qos(); + ATM_Addr *local_addr=(ATM_Addr*)local_sap.get_addr(), + *remote_addr=(ATM_Addr*)remote_sap.get_addr(); + + if (ACE_OS::setsockopt(handle, + SOL_ATM, + SO_ATMSAP, + ACE_reinterpret_cast(char*, + &(local_addr->atmsap)), + sizeof(local_addr->atmsap)) < 0) { + ACE_OS::printf( "ATM_Connector(connect): unable to set atmsap %d\nContinuing...", + errno); + } + if (ACE_OS::setsockopt(handle, + SOL_ATM, + SO_ATMQOS, + ACE_reinterpret_cast(char*, + &qos), + sizeof(qos)) < 0) { + ACE_DEBUG((LM_DEBUG,ASYS_TEXT("ATM_Connector(connect): unable to set qos %d\n"), + errno)); + return -1; + } + + int result = ACE_OS::connect(handle, + (struct sockaddr *)&(remote_addr->sockaddratmsvc), + sizeof( remote_addr->sockaddratmsvc)); + + if ( result != 0 ) + ACE_DEBUG(LM_DEBUG, + ASYS_TEXT("ATM_Connector(connect): connection failed, %d\n"), + errno); + + return result; #else ACE_UNUSED_ARG (new_stream); ACE_UNUSED_ARG (remote_sap); @@ -86,7 +134,7 @@ ACE_ATM_Connector::connect (ACE_ATM_Stream &new_stream, ACE_UNUSED_ARG (flags); ACE_UNUSED_ARG (perms); return 0; -#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2 */ +#endif /* ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM */ } #endif /* ACE_HAS_ATM */ |