]> Chaos Git - corbenik/ctrulib.git/commitdiff
Implemented SOCU_AddGlobalSocket.
authoryellows8 <yellows8@users.noreply.github.com>
Wed, 30 Mar 2016 17:52:15 +0000 (13:52 -0400)
committeryellows8 <yellows8@users.noreply.github.com>
Wed, 30 Mar 2016 17:52:15 +0000 (13:52 -0400)
libctru/include/3ds/services/soc.h
libctru/source/services/soc/soc_addglobalsocket.c [new file with mode: 0644]

index 26d68e8d74a30be46ff1782700dbf6a3844a6925..b84f9248fb7ca8cd759492a49c8116139c862792 100644 (file)
@@ -138,3 +138,10 @@ int SOCU_GetNetworkOpt(int level, NetworkOpt optname, void * optval, socklen_t *
  * @return error
  */
 int SOCU_GetIPInfo(struct in_addr *ip, struct in_addr *netmask, struct in_addr *broadcast);
+
+/**
+ * @brief Adds a global socket.
+ * @param sockfd   The socket fd.
+ * @return error
+ */
+int SOCU_AddGlobalSocket(int sockfd);
diff --git a/libctru/source/services/soc/soc_addglobalsocket.c b/libctru/source/services/soc/soc_addglobalsocket.c
new file mode 100644 (file)
index 0000000..267da30
--- /dev/null
@@ -0,0 +1,21 @@
+#include "soc_common.h"
+#include <3ds/ipc.h>
+#include <3ds/result.h>
+
+int SOCU_AddGlobalSocket(int sockfd)
+{
+       u32 *cmdbuf = getThreadCommandBuffer();
+
+       sockfd = soc_get_fd(sockfd);
+       if(sockfd < 0) {
+               errno = -sockfd;
+               return -1;
+       }
+
+       cmdbuf[0] = IPC_MakeHeader(0x23,1,0); // 0x230040
+       cmdbuf[1] = (u32)sockfd;
+
+       int ret = svcSendSyncRequest(SOCU_handle);
+       if(R_FAILED(ret))return ret;
+       return cmdbuf[1];
+}