diff options
author | ajs3 <ajs3@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2007-07-29 22:07:09 +0000 |
---|---|---|
committer | ajs3 <ajs3@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2007-07-29 22:07:09 +0000 |
commit | 8fa7ad3d2a58a22570aff4bb7762be7f98e6bf2c (patch) | |
tree | e696d94a9b23699a281bcd4017d98908e5855317 | |
parent | e40511de55836cc3d81793f6b8d9b74870ff5523 (diff) | |
download | ATCD-8fa7ad3d2a58a22570aff4bb7762be7f98e6bf2c.tar.gz |
More SCTP changes.
-rw-r--r-- | ACE/ace/SOCK_SCTP.cpp | 50 | ||||
-rw-r--r-- | ACE/ace/SOCK_SCTP.h | 15 | ||||
-rw-r--r-- | ACE/ace/SOCK_SCTP_SEQPACK.cpp | 62 | ||||
-rw-r--r-- | ACE/ace/SOCK_SCTP_SEQPACK.h | 19 |
4 files changed, 81 insertions, 65 deletions
diff --git a/ACE/ace/SOCK_SCTP.cpp b/ACE/ace/SOCK_SCTP.cpp index ab0d4a70e01..8caf05b80df 100644 --- a/ACE/ace/SOCK_SCTP.cpp +++ b/ACE/ace/SOCK_SCTP.cpp @@ -34,6 +34,56 @@ ACE_SOCK_SCTP::close (void) return ACE_SOCK::close (); } +ssize_t ACE_SOCK_SCTP::recvmsg(void* msg, + size_t msgsz, + ACE_Multihomed_INET_Addr& from_addr, + sctp_sndrcvinfo* sinfo, + int* msg_flags + ) +{ + ssize_t rdsz; + sockaddr_in frm; + bzero(&frm, sizeof(frm)); + socklen_t frm_len = 0; + + rdsz = sctp_recvmsg(this->get_handle(), + msg, + msgsz, + (sockaddr*)&frm, + &frm_len, + sinfo, + msg_flags); + + // *** TO-DO: Initialize from_addr + + return rdsz; +} + +ssize_t ACE_SOCK_SCTP::sendmsg(const void* msg, + size_t msgsz, + ACE_Multihomed_INET_Addr& to_addr, + uint32_t ppid, + uint32_t flags, + uint16_t stream, + uint32_t timetolive, + uint32_t context) +{ + ssize_t sndsize; + + sndsize = sctp_sendmsg(this->get_handle(), + msg, + msgsz, + (sockaddr*)to_addr.get_addr(), + to_addr.get_addr_size(), + ppid, + flags, + stream, + timetolive, + context); + + return sndsize; +} + int ACE_SOCK_SCTP::get_local_addrs (ACE_INET_Addr *addrs, size_t &size, int assoc_id) const { diff --git a/ACE/ace/SOCK_SCTP.h b/ACE/ace/SOCK_SCTP.h index 50f01735511..f56fc638946 100644 --- a/ACE/ace/SOCK_SCTP.h +++ b/ACE/ace/SOCK_SCTP.h @@ -54,6 +54,21 @@ public: */ int get_remote_addrs (ACE_INET_Addr *addrs, size_t &size, int assoc_id) const; + ssize_t recvmsg(void* msg, + size_t msgsz, + ACE_Multihomed_INET_Addr& from_addr, + struct sctp_sndrcvinfo* sinfo, + int* msg_flags); + + ssize_t sendmsg(const void* msg, + size_t msgsz, + ACE_Multihomed_INET_Addr& to_addr, + uint32_t ppid = 0, + uint32_t flags = 0, + uint16_t stream = 0, + uint32_t timetolive = 0, + uint32_t context = 0); + // = I/O functions. int close (void); diff --git a/ACE/ace/SOCK_SCTP_SEQPACK.cpp b/ACE/ace/SOCK_SCTP_SEQPACK.cpp index 694d34e512b..d721558a3f9 100644 --- a/ACE/ace/SOCK_SCTP_SEQPACK.cpp +++ b/ACE/ace/SOCK_SCTP_SEQPACK.cpp @@ -13,54 +13,6 @@ ACE_SOCK_SCTP_SEQPACK::~ACE_SOCK_SCTP_SEQPACK (void) { } -ssize_t ACE_SOCK_SCTP_SEQPACK::recvmsg(void* msg, - size_t msgsz, - struct sockaddr* from, - socklen_t* fromlen, - ACE_INET_Addr& from_addr, - struct sctp_sndrcvinfo* sinfo, - int* msg_flags - ) -{ - ssize_t rdsz; - rdsz = sctp_recvmsg(this->get_handle(), - msg, - msgsz, - from, - fromlen, - sinfo, - msg_flags); - - // *** TO-DO: Initialize from_addr - - return rdsz; -} - -ssize_t ACE_SOCK_SCTP_SEQPACK::sendmsg(const void* msg, - size_t msgsz, - ACE_INET_Addr& to_addr, - uint32_t ppid, - uint32_t flags, - uint16_t stream, - uint32_t timetolive, - uint32_t context) -{ - ssize_t sndsize; - - sndsize = sctp_sendmsg(this->get_handle(), - msg, - msgsz, - (sockaddr*)to_addr.get_addr(), - to_addr.get_addr_size(), - ppid, - flags, - stream, - timetolive, - context); - - return sndsize; -} - int ACE_SOCK_SCTP_SEQPACK::open (const ACE_Multihomed_INET_Addr &local_sap, int reuse_addr, @@ -180,4 +132,18 @@ ACE_SOCK_SCTP_SEQPACK::open (const ACE_Multihomed_INET_Addr &local_sap, return error ? -1 : 0; } +int ACE_SOCK_SCTP_SEQPACK::peeloff(int assoc_id, ACE_SOCK_SCTP_STREAM& peer) +{ + // Call the underlying sctp_peeloff method to return a 1-to-1 style + // socket + int new_handle = sctp_peeloff(this->get_handle(), assoc_id); + + if(new_handle != -1) + { + peer.set_handle(new_handle); + } + + return new_handle; +} + ACE_END_VERSIONED_NAMESPACE_DECL diff --git a/ACE/ace/SOCK_SCTP_SEQPACK.h b/ACE/ace/SOCK_SCTP_SEQPACK.h index 049f438fdf4..21fe378a584 100644 --- a/ACE/ace/SOCK_SCTP_SEQPACK.h +++ b/ACE/ace/SOCK_SCTP_SEQPACK.h @@ -14,8 +14,8 @@ #define ACE_SOCK_SCTP_SEQPACK_H #include /**/ "ace/pre.h" - #include "ace/SOCK_SCTP.h" +#include "ace/SOCK_SCTP_STREAM.h" #include "ace/INET_Addr.h" #include "ace/Multihomed_INET_Addr.h" @@ -48,22 +48,7 @@ public: int reuse_addr = 0, int protocol_family = PF_UNSPEC); - ssize_t recvmsg(void* msg, - size_t msgsz, - struct sockaddr* from, - socklen_t *fromlen, - ACE_INET_Addr& from_addr, - struct sctp_sndrcvinfo* sinfo, - int* msg_flags); - - ssize_t sendmsg(const void* msg, - size_t msgsz, - ACE_INET_Addr& to_addr, - uint32_t ppid = 0, - uint32_t flags = 0, - uint16_t stream = 0, - uint32_t timetolive = 0, - uint32_t context = 0); + int peeloff(int assoc_id, ACE_SOCK_SCTP_STREAM& peer); }; ACE_END_VERSIONED_NAMESPACE_DECL |