Browse Source

Merge pull request #178 from paullouisageneau/update-usrsctp

Update usrsctp
Paul-Louis Ageneau 4 years ago
parent
commit
488e143e1f
3 changed files with 8 additions and 14 deletions
  1. 1 1
      deps/usrsctp
  2. 5 11
      src/sctptransport.cpp
  3. 2 2
      src/sctptransport.hpp

+ 1 - 1
deps/usrsctp

@@ -1 +1 @@
-Subproject commit ffed0925f27d404173c1e3e750d818f432d2c019
+Subproject commit 0db969100094422d9ea74a08ae5e5d9a4cfdb06b

+ 5 - 11
src/sctptransport.cpp

@@ -702,8 +702,9 @@ std::optional<milliseconds> SctpTransport::rtt() {
 }
 }
 
 
 int SctpTransport::RecvCallback(struct socket *sock, union sctp_sockstore addr, void *data,
 int SctpTransport::RecvCallback(struct socket *sock, union sctp_sockstore addr, void *data,
-                                size_t len, struct sctp_rcvinfo recv_info, int flags, void *ptr) {
-	auto *transport = static_cast<SctpTransport *>(ptr);
+                                size_t len, struct sctp_rcvinfo recv_info, int flags,
+                                void *ulp_info) {
+	auto *transport = static_cast<SctpTransport *>(ulp_info);
 
 
 	std::shared_lock lock(InstancesMutex);
 	std::shared_lock lock(InstancesMutex);
 	if (Instances.find(transport) == Instances.end()) {
 	if (Instances.find(transport) == Instances.end()) {
@@ -717,15 +718,8 @@ int SctpTransport::RecvCallback(struct socket *sock, union sctp_sockstore addr,
 	return ret;
 	return ret;
 }
 }
 
 
-int SctpTransport::SendCallback(struct socket *sock, uint32_t sb_free) {
-	struct sctp_paddrinfo paddrinfo = {};
-	socklen_t len = sizeof(paddrinfo);
-	if (usrsctp_getsockopt(sock, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, &paddrinfo, &len))
-		return -1;
-
-	auto sconn = reinterpret_cast<struct sockaddr_conn *>(&paddrinfo.spinfo_address);
-	void *ptr = sconn->sconn_addr;
-	auto *transport = static_cast<SctpTransport *>(ptr);
+int SctpTransport::SendCallback(struct socket *, uint32_t sb_free, void *ulp_info) {
+	auto *transport = static_cast<SctpTransport *>(ulp_info);
 
 
 	std::shared_lock lock(InstancesMutex);
 	std::shared_lock lock(InstancesMutex);
 	if (Instances.find(transport) == Instances.end())
 	if (Instances.find(transport) == Instances.end())

+ 2 - 2
src/sctptransport.hpp

@@ -110,8 +110,8 @@ private:
 	std::atomic<size_t> mBytesSent = 0, mBytesReceived = 0;
 	std::atomic<size_t> mBytesSent = 0, mBytesReceived = 0;
 
 
 	static int RecvCallback(struct socket *sock, union sctp_sockstore addr, void *data, size_t len,
 	static int RecvCallback(struct socket *sock, union sctp_sockstore addr, void *data, size_t len,
-	                        struct sctp_rcvinfo recv_info, int flags, void *user_data);
-	static int SendCallback(struct socket *sock, uint32_t sb_free);
+	                        struct sctp_rcvinfo recv_info, int flags, void *ulp_info);
+	static int SendCallback(struct socket *sock, uint32_t sb_free, void *ulp_info);
 	static int WriteCallback(void *sctp_ptr, void *data, size_t len, uint8_t tos, uint8_t set_df);
 	static int WriteCallback(void *sctp_ptr, void *data, size_t len, uint8_t tos, uint8_t set_df);
 
 
 	static std::unordered_set<SctpTransport *> Instances;
 	static std::unordered_set<SctpTransport *> Instances;