summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorajs3 <ajs3@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-07-29 22:07:09 +0000
committerajs3 <ajs3@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-07-29 22:07:09 +0000
commit8fa7ad3d2a58a22570aff4bb7762be7f98e6bf2c (patch)
treee696d94a9b23699a281bcd4017d98908e5855317
parente40511de55836cc3d81793f6b8d9b74870ff5523 (diff)
downloadATCD-8fa7ad3d2a58a22570aff4bb7762be7f98e6bf2c.tar.gz
More SCTP changes.
-rw-r--r--ACE/ace/SOCK_SCTP.cpp50
-rw-r--r--ACE/ace/SOCK_SCTP.h15
-rw-r--r--ACE/ace/SOCK_SCTP_SEQPACK.cpp62
-rw-r--r--ACE/ace/SOCK_SCTP_SEQPACK.h19
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