mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r8674) [PSP] -Add: added network code for PSP, based on the work of Turulo
-Add: added general header-inclusing for PSP
This commit is contained in:
parent
b71d6e1401
commit
0d91ed68a9
|
@ -91,6 +91,29 @@ typedef unsigned long in_addr_t;
|
||||||
typedef int socklen_t;
|
typedef int socklen_t;
|
||||||
#endif
|
#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 */
|
/* OS/2 stuff */
|
||||||
#if defined(__OS2__)
|
#if defined(__OS2__)
|
||||||
# define SOCKET int
|
# define SOCKET int
|
||||||
|
@ -160,7 +183,7 @@ static inline bool SetNonBlocking(SOCKET d)
|
||||||
#else
|
#else
|
||||||
int nonblocking = 1;
|
int nonblocking = 1;
|
||||||
#endif
|
#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;
|
return setsockopt(d, SOL_SOCKET, SO_NONBLOCK, &nonblocking, sizeof(nonblocking)) == 0;
|
||||||
#else
|
#else
|
||||||
return ioctlsocket(d, FIONBIO, &nonblocking) == 0;
|
return ioctlsocket(d, FIONBIO, &nonblocking) == 0;
|
||||||
|
|
|
@ -339,6 +339,7 @@ void CheckMinPlayers(void)
|
||||||
// Find all IP-aliases for this host
|
// Find all IP-aliases for this host
|
||||||
static void NetworkFindIPs(void)
|
static void NetworkFindIPs(void)
|
||||||
{
|
{
|
||||||
|
#if !defined(PSP)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#if defined(BEOS_NET_SERVER) /* doesn't have neither getifaddrs or net/if.h */
|
#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++) {
|
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));
|
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
|
// 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 not try to resolve the name
|
||||||
if (ip == INADDR_NONE) {
|
if (ip == INADDR_NONE) {
|
||||||
|
struct in_addr addr;
|
||||||
|
#if !defined(PSP)
|
||||||
struct hostent *he = gethostbyname(hostname);
|
struct hostent *he = gethostbyname(hostname);
|
||||||
if (he == NULL) {
|
if (he == NULL) {
|
||||||
DEBUG(net, 0, "Cannot resolve '%s'", hostname);
|
DEBUG(net, 0, "Cannot resolve '%s'", hostname);
|
||||||
} else {
|
return ip;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
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;
|
return ip;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,12 @@
|
||||||
# define strcasecmp stricmp
|
# define strcasecmp stricmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PSP)
|
||||||
|
# include <psptypes.h>
|
||||||
|
# include <pspdebug.h>
|
||||||
|
# include <pspthreadman.h>
|
||||||
|
#endif /* PSP */
|
||||||
|
|
||||||
#ifdef __BEOS__
|
#ifdef __BEOS__
|
||||||
# include <SupportDefs.h>
|
# include <SupportDefs.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -81,7 +87,8 @@
|
||||||
/* PSP can only have 10 file-descriptors open at any given time, but this
|
/* 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
|
* switch only limits reads via the Fio system. So keep 2 fds free for things
|
||||||
* like saving a game. */
|
* like saving a game. */
|
||||||
#define LIMITED_FDS 8
|
# define LIMITED_FDS 8
|
||||||
|
# define printf pspDebugScreenPrintf
|
||||||
#endif /* PSP */
|
#endif /* PSP */
|
||||||
|
|
||||||
/* by default we use [] var arrays */
|
/* by default we use [] var arrays */
|
||||||
|
|
Loading…
Reference in New Issue