summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2007-02-11 13:57:35 +0000
committertruelight <truelight@openttd.org>2007-02-11 13:57:35 +0000
commit0d91ed68a9b5e63098eca9765686acf5928ed643 (patch)
tree221561506effc0c4c1a3f46200cc308b8a4ee5a5
parentb71d6e14013d237feeb69367a0e978c7622a813b (diff)
downloadopenttd-0d91ed68a9b5e63098eca9765686acf5928ed643.tar.xz
(svn r8674) [PSP] -Add: added network code for PSP, based on the work of Turulo
-Add: added general header-inclusing for PSP
-rw-r--r--src/network/core/os_abstraction.h25
-rw-r--r--src/network/network.cpp31
-rw-r--r--src/stdafx.h9
3 files changed, 59 insertions, 6 deletions
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index 00545c70f..8c5e4b9d3 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -91,6 +91,29 @@ typedef unsigned long in_addr_t;
typedef int socklen_t;
#endif
+#if defined(PSP)
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <pspnet.h>
+# include <pspnet_inet.h>
+# include <pspnet_apctl.h>
+# include <pspnet_resolver.h>
+# include <errno.h>
+# include <unistd.h>
+# include <sys/select.h>
+# include <sys/time.h>
+# include <sys/fd_set.h>
+
+# define TCP_NODELAY 1
+# define SO_NONBLOCK 0x1009
+# define SOCKET int
+# define INVALID_SOCKET -1
+# define INADDR_NONE 0xffffffff
+# define closesocket close
+# define GET_LAST_ERROR() sceNetInetGetErrno()
+#endif /* PSP */
+
/* OS/2 stuff */
#if defined(__OS2__)
# define SOCKET int
@@ -160,7 +183,7 @@ static inline bool SetNonBlocking(SOCKET d)
#else
int nonblocking = 1;
#endif
-#if defined(__BEOS__) && defined(BEOS_NET_SERVER)
+#if (defined(__BEOS__) && defined(BEOS_NET_SERVER)) || defined(PSP)
return setsockopt(d, SOL_SOCKET, SO_NONBLOCK, &nonblocking, sizeof(nonblocking)) == 0;
#else
return ioctlsocket(d, FIONBIO, &nonblocking) == 0;
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 1ea36b50e..aa45ef748 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -339,6 +339,7 @@ void CheckMinPlayers(void)
// Find all IP-aliases for this host
static void NetworkFindIPs(void)
{
+#if !defined(PSP)
int i;
#if defined(BEOS_NET_SERVER) /* doesn't have neither getifaddrs or net/if.h */
@@ -506,6 +507,7 @@ static void NetworkFindIPs(void)
for (i = 0; _broadcast_list[i] != 0; i++) {
DEBUG(net, 3, "%d) %s", i, inet_ntoa(*(struct in_addr *)&_broadcast_list[i]));//inet_ntoa(inaddr));
}
+#endif /* PSP */
}
// Resolve a hostname to a inet_addr
@@ -518,14 +520,35 @@ unsigned long NetworkResolveHost(const char *hostname)
// If not try to resolve the name
if (ip == INADDR_NONE) {
+ struct in_addr addr;
+#if !defined(PSP)
struct hostent *he = gethostbyname(hostname);
if (he == NULL) {
DEBUG(net, 0, "Cannot resolve '%s'", hostname);
- } else {
- struct in_addr addr = *(struct in_addr *)he->h_addr_list[0];
- DEBUG(net, 1, "Resolved '%s' to %s", hostname, inet_ntoa(addr));
- ip = addr.s_addr;
+ return ip;
+ }
+ addr = *(struct in_addr *)he->h_addr_list[0];
+#else
+ int rid = -1;
+ char buf[1024];
+
+ /* Create a resolver */
+ if (sceNetResolverCreate(&rid, buf, sizeof(buf)) < 0) {
+ DEBUG(net, 0, "[NET] Error connecting resolver");
+ return ip;
}
+
+ /* Try to resolve the name */
+ if (sceNetResolverStartNtoA(rid, hostname, &addr, 2, 3) < 0) {
+ DEBUG(net, 0, "[NET] Cannot resolve %s", hostname);
+ sceNetResolverDelete(rid);
+ return ip;
+ }
+ sceNetResolverDelete(rid);
+#endif /* PSP */
+
+ DEBUG(net, 1, "[NET] Resolved %s to %s", hostname, inet_ntoa(addr));
+ ip = addr.s_addr;
}
return ip;
}
diff --git a/src/stdafx.h b/src/stdafx.h
index 29f32c3ce..22259f71d 100644
--- a/src/stdafx.h
+++ b/src/stdafx.h
@@ -37,6 +37,12 @@
# define strcasecmp stricmp
#endif
+#if defined(PSP)
+# include <psptypes.h>
+# include <pspdebug.h>
+# include <pspthreadman.h>
+#endif /* PSP */
+
#ifdef __BEOS__
# include <SupportDefs.h>
#endif
@@ -81,7 +87,8 @@
/* PSP can only have 10 file-descriptors open at any given time, but this
* switch only limits reads via the Fio system. So keep 2 fds free for things
* like saving a game. */
-#define LIMITED_FDS 8
+# define LIMITED_FDS 8
+# define printf pspDebugScreenPrintf
#endif /* PSP */
/* by default we use [] var arrays */