From 62508eca779865daa2a733471150d718e3f00072 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 2 May 2016 18:37:08 +0200 Subject: [PATCH] Create socket_create --- libretro-common/include/net/net_socket.h | 10 +++- libretro-common/net/net_socket.c | 60 ++++++++++++++++++++++++ netlogger.c | 13 +++-- 3 files changed, 79 insertions(+), 4 deletions(-) diff --git a/libretro-common/include/net/net_socket.h b/libretro-common/include/net/net_socket.h index a1ab722fa3..854f307036 100644 --- a/libretro-common/include/net/net_socket.h +++ b/libretro-common/include/net/net_socket.h @@ -31,10 +31,16 @@ RETRO_BEGIN_DECLS +enum socket_domain +{ + SOCKET_DOMAIN_INET = 0 +}; + enum socket_type { SOCKET_TYPE_DATAGRAM = 0, - SOCKET_TYPE_STREAM + SOCKET_TYPE_STREAM, + SOCKET_TYPE_SEQPACKET }; int socket_init(void **address, uint16_t port, const char *server, enum socket_type type); @@ -57,6 +63,8 @@ bool socket_bind(int fd, void *data); int socket_connect(int fd, void *data, bool timeout_enable); +int socket_create(const char *name, enum socket_domain domain_type, enum socket_type socket_type, int protocol); + RETRO_END_DECLS #endif diff --git a/libretro-common/net/net_socket.c b/libretro-common/net/net_socket.c index 22e07fb2f9..189d00cf42 100644 --- a/libretro-common/net/net_socket.c +++ b/libretro-common/net/net_socket.c @@ -49,6 +49,9 @@ int socket_init(void **address, uint16_t port, const char *server, enum socket_t case SOCKET_TYPE_STREAM: hints.ai_socktype = SOCK_STREAM; break; + case SOCKET_TYPE_SEQPACKET: + /* TODO/FIXME - implement? */ + break; } if (!server) @@ -211,3 +214,60 @@ int socket_connect(int fd, void *data, bool timeout_enable) return connect(fd, addr->ai_addr, addr->ai_addrlen); } + +int socket_create( + const char *name, + enum socket_domain domain_type, + enum socket_type socket_type, + int protocol) +{ +#ifdef VITA + int type = 0; + int domain = 0; + + switch (domain_type) + { + case SOCKET_DOMAIN_INET: + domain = PSP2_NET_AF_INET; + break; + } + + switch (socket_type) + { + case SOCKET_TYPE_DATAGRAM: + type = PSP2_NET_SOCK_DGRAM; + break; + case SOCKET_TYPE_STREAM: + type = PSP2_NET_SOCK_STREAM; + break; + case SOCKET_TYPE_SEQPACKET: + /* TODO/FIXME - implement */ + break; + } + return sceNetSocket(name, domain, type, protocol); +#else + int type = 0; + int domain = 0; + + switch (domain_type) + { + case SOCKET_DOMAIN_INET: + domain = AF_INET; + break; + } + + switch (socket_type) + { + case SOCKET_TYPE_DATAGRAM: + type = SOCK_DGRAM; + break; + case SOCKET_TYPE_STREAM: + type = SOCK_STREAM; + break; + case SOCKET_TYPE_SEQPACKET: + /* TODO/FIXME - implement */ + break; + } + return socket(domain, type, protocol); +#endif +} diff --git a/netlogger.c b/netlogger.c index b18b8ba015..06dd34a0b0 100644 --- a/netlogger.c +++ b/netlogger.c @@ -63,8 +63,11 @@ static int network_interface_up(struct sockaddr_in *target, int index, sceNetInit(&initparam); } - *s = sceNetSocket("RA_netlogger", - PSP2_NET_AF_INET, PSP2_NET_SOCK_DGRAM, 0); + *s = socket_create( + "ra_netlogger", + SOCKET_DOMAIN_INET, + SOCKET_TYPE_DATAGRAM, + 0); target->sin_family = PSP2_NET_AF_INET; target->sin_port = sceNetHtons(udp_port); @@ -101,7 +104,11 @@ static int network_interface_up(struct sockaddr_in *target, int index, if (ret < 0) return -1; - *s = socket(AF_INET, SOCK_DGRAM, 0); + *s = socket_create( + "ra_netlogger", + SOCKET_DOMAIN_INET, + SOCKET_TYPE_DATAGRAM, + 0); target->sin_family = AF_INET; target->sin_port = htons(udp_port);