 |
forums.ps2dev.org Homebrew PS2, PSP & PS3 Development Discussions
|
| View previous topic :: View next topic |
| Author |
Message |
Henk
Joined: 29 Dec 2006 Posts: 14
|
Posted: Thu Jan 18, 2007 11:56 am Post subject: ntba2's tcpip-additions committable to svn? |
|
|
Heyas,
I am wondering if the tcpip-additions from ntba2 can be committed to svn. Basically they don't change any existing functionality, but only add 6 functions which are needed to compile myPS2.
I don't see any reason why they can't be commited since they don't change anything which might break existing applications, but having them in svn would make my life way easier since I wouldn't need to patch the sdk each time a new revision comes out. Below are the diff -ru changes.
| Code: |
--- ps2sdk/common/include/tcpip.h 2007-01-18 02:58:32.000000000 +0100
+++ ps2sdksrc/common/include/tcpip.h 2007-01-18 02:56:41.000000000 +0100
@@ -361,4 +361,21 @@
u8 hw_addr[8];
} t_ip_info;
+#ifndef FAR
+#define FAR
+#endif
+struct hostent {
+ char FAR * h_name; /* official name of host */
+ char FAR * FAR * h_aliases; /* alias list */
+ short h_addrtype; /* host address type */
+ short h_length; /* length of address */
+ char FAR * FAR * h_addr_list; /* list of addresses */
+#define h_addr h_addr_list[0] /* address, for backward compat */
+};
+
+#if !defined(INADDR_NONE)
+#define INADDR_NONE ((u32) 0xffffffff) /* 255.255.255.255 */
+#endif
+
#endif
+
--- ps2sdk/ee/rpc/tcpip/include/ps2ip.h 2007-01-18 02:58:33.000000000 +0100
+++ ps2sdksrc/ee/rpc/tcpip/include/ps2ip.h 2007-01-18 02:55:54.000000000 +0100
@@ -34,6 +34,12 @@
int ps2ip_getconfig(char *netif_name, t_ip_info *ip_info);
int select(int maxfdp1, struct fd_set *readset, struct fd_set *writeset, struct fd_set *exceptset, struct timeval *timeout);
int ioctlsocket(int s, long cmd, void *argp);
+int getsockname(int s, struct sockaddr* name, int* namelen);
+int getpeername(int s, struct sockaddr *name, int *namelen);
+int getsockopt(int s, int level, int optname, void* optval, socklen_t* optlen);
+int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
+int gethostbyname(char *name, struct in_addr *ip);
+int ps2ip_dnslookup(char *name, struct in_addr *ip);
#ifdef __cplusplus
}
--- ps2sdk/ee/rpc/tcpip/src/ps2ipc.c 2007-01-18 02:58:33.000000000 +0100
+++ ps2sdksrc/ee/rpc/tcpip/src/ps2ipc.c 2007-01-18 02:55:29.000000000 +0100
@@ -35,6 +35,11 @@
#define ID_GETCONFIG 13
#define ID_SELECT 14
#define ID_IOCTL 15
+#define ID_GETSOCKNAME 16
+#define ID_GETPEERNAME 17
+#define ID_GETSOCKOPT 18
+#define ID_SETSOCKOPT 19
+#define ID_GETHOSTBYNAME 20
static int _init_check = 0;
static SifRpcClientData_t _ps2ip;
@@ -422,3 +427,85 @@
return _rpc_buffer[0];
}
+
+int getsockname(int s, struct sockaddr *name, int *namelen)
+{
+ cmd_pkt *pkt = (cmd_pkt *)_rpc_buffer;
+
+ if(!_init_check) return -1;
+
+ pkt->socket = s;
+
+ SifCallRpc(&_ps2ip, ID_GETSOCKNAME, 0, (void*)_rpc_buffer, 4, (void*)_rpc_buffer, sizeof(cmd_pkt), 0, 0);
+
+ if(pkt->len < *namelen) *namelen = pkt->len;
+ memcpy((void *)name, (void *)&pkt->sockaddr, *namelen);
+
+ return pkt->socket;
+}
+
+int getpeername(int s, struct sockaddr *name, int *namelen)
+{
+ cmd_pkt *pkt = (cmd_pkt *)_rpc_buffer;
+
+ if(!_init_check) return -1;
+
+ pkt->socket = s;
+
+ SifCallRpc(&_ps2ip, ID_GETPEERNAME, 0, (void*)_rpc_buffer, 4, (void*)_rpc_buffer, sizeof(cmd_pkt), 0, 0);
+
+ if(pkt->len < *namelen) *namelen = pkt->len;
+ memcpy((void *)name, (void *)&pkt->sockaddr, *namelen);
+
+ return pkt->socket;
+}
+
+// return buffer:
+// Offset 0 = getsockopt return value
+// 0ffset 1 = optlen
+// Offset 2 = optval (max 128 bytes)
+int getsockopt(int s, int level, int optname, void* optval, socklen_t* optlen)
+{
+ ((int*)_rpc_buffer)[0] = s;
+ ((int*)_rpc_buffer)[1] = level;
+ ((int*)_rpc_buffer)[2] = optname;
+
+ SifCallRpc(&_ps2ip, ID_GETSOCKOPT, 0, (void*)_rpc_buffer, 12, (void*)_rpc_buffer, 136, 0, 0);
+
+ if(_rpc_buffer[1] < *optlen) *optlen = _rpc_buffer[1];
+ memcpy((void*)optval, &_rpc_buffer[2], *optlen);
+
+ return _rpc_buffer[0];
+}
+
+int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
+{
+ ((int*)_rpc_buffer)[0] = s;
+ ((int*)_rpc_buffer)[1] = level;
+ ((int*)_rpc_buffer)[2] = optname;
+ ((int*)_rpc_buffer)[3] = optlen;
+
+ memcpy(&_rpc_buffer[4], optval, optlen);
+
+ SifCallRpc(&_ps2ip, ID_SETSOCKOPT, 0, (void*)_rpc_buffer, 16 + optlen, (void*)_rpc_buffer, 4, 0, 0);
+
+ return _rpc_buffer[0];
+}
+
+int gethostbyname(char *name, struct in_addr *ip)
+{
+ int ret;
+
+ memcpy(_rpc_buffer, name, 256);
+ SifCallRpc(&_ps2ip, ID_GETHOSTBYNAME, 0, (void*)_rpc_buffer, 256, (void*)_rpc_buffer, 4 + sizeof(struct in_addr), 0, 0);
+
+ ret = _rpc_buffer[0];
+ memcpy(ip, &_rpc_buffer[1], sizeof(struct in_addr));
+
+ return ret;
+}
+
+int ps2ip_dnslookup(char *name, struct in_addr *ip)
+{
+ return gethostbyname(name, ip);
+}
--- ps2sdk/iop/tcpip/tcpip/include/ps2ip.h 2007-01-18 02:57:58.000000000 +0100
+++ ps2sdksrc/iop/tcpip/tcpip/include/ps2ip.h 2007-01-18 02:43:49.000000000 +0100
@@ -144,3 +144,8 @@
#define I_ps2ip_input DECLARE_IMPORT(22, ps2ip_input)
#endif /* IOP_PS2IP_H */
+// ntba2
+#define getsockname lwip_getsockname
+#define getpeername lwip_getpeername
+#define getsockopt lwip_getsockopt
+#define setsockopt lwip_setsockopt
\ No newline at end of file
--- ps2sdk/iop/tcpip/tcpips/src/imports.lst 2007-01-18 02:57:58.000000000 +0100
+++ ps2sdksrc/iop/tcpip/tcpips/src/imports.lst 2007-01-18 02:45:19.000000000 +0100
@@ -41,6 +41,10 @@
I_lwip_bind
I_lwip_close
I_lwip_connect
+I_lwip_getpeername
+I_lwip_getsockname
+I_lwip_getsockopt
+I_lwip_setsockopt
I_lwip_listen
I_lwip_recv
I_lwip_recvfrom
@@ -52,3 +56,7 @@
I_ps2ip_getconfig
I_ps2ip_setconfig
ps2ip_IMPORTS_end
+
+dns_IMPORTS_start
+I_gethostbyname
+dns_IMPORTS_end
\ No newline at end of file
--- ps2sdk/iop/tcpip/tcpips/src/irx_imports.h 2007-01-18 02:57:58.000000000 +0100
+++ ps2sdksrc/iop/tcpip/tcpips/src/irx_imports.h 2007-01-18 02:46:17.000000000 +0100
@@ -17,6 +17,7 @@
#include "irx.h"
/* Please keep these in alphabetical order! */
+#include "../../dns/include/dns.h"
#include "intrman.h"
#include "ps2ip.h"
#include "sifcmd.h"
--- ps2sdk/iop/tcpip/tcpips/src/ps2ips.c 2007-01-18 02:57:58.000000000 +0100
+++ ps2sdksrc/iop/tcpip/tcpips/src/ps2ips.c 2007-01-18 02:51:47.000000000 +0100
@@ -31,6 +31,8 @@
#include <intrman.h>
#include <ps2ip.h>
+#include "../../dns/include/dns.h"
+
#define PS2IP_IRX 0xB0125F2
#define ID_ACCEPT 1
@@ -47,6 +49,11 @@
#define ID_GETCONFIG 13
#define ID_SELECT 14
#define ID_IOCTL 15
+#define ID_GETSOCKNAME 16
+#define ID_GETPEERNAME 17
+#define ID_GETSOCKOPT 18
+#define ID_SETSOCKOPT 19
+#define ID_GETHOSTBYNAME 20
#define BUFF_SIZE (1024)
@@ -743,7 +750,87 @@
ret = ioctlsocket( s, cmd, argp );
ptr[0] = ret;
}
-
+void do_getsockname( void *rpcBuffer, int size )
+{
+ int *ptr = rpcBuffer;
+ cmd_pkt *pkt = (cmd_pkt *)ptr;
+ struct sockaddr addr;
+ int addrlen, ret;
+
+ ret = getsockname(pkt->socket, &addr, &addrlen);
+
+ pkt->socket = ret;
+ memcpy(&pkt->sockaddr, &addr, sizeof(struct sockaddr));
+ pkt->len = sizeof(struct sockaddr);
+}
+
+void do_getpeername( void *rpcBuffer, int size )
+{
+ int *ptr = rpcBuffer;
+ cmd_pkt *pkt = (cmd_pkt *)ptr;
+ struct sockaddr addr;
+ int addrlen, ret;
+
+ ret = getpeername(pkt->socket, &addr, &addrlen);
+
+ pkt->socket = ret;
+ memcpy(&pkt->sockaddr, &addr, sizeof(struct sockaddr));
+ pkt->len = sizeof(struct sockaddr);
+}
+
+void do_getsockopt( void *rpcBuffer, int size )
+{
+ int *ptr = rpcBuffer, ret;
+ int s;
+ int level;
+ int optname;
+ unsigned char optval[128];
+ int optlen;
+
+ s = ((int*)_rpc_buffer)[0];
+ level = ((int*)_rpc_buffer)[1];
+ optname = ((int*)_rpc_buffer)[2];
+ optlen = sizeof(optval);
+
+ ret = getsockopt(s, level, optname, optval, &optlen);
+
+ ptr[0] = ret; // 4
+ ptr[1] = optlen; // 4
+ memcpy( &ptr[2], optval, 128 ); // 128
+
+ // 136 bytes returned
+}
+
+void do_setsockopt( void *rpcBuffer, int size )
+{
+ int *ptr = rpcBuffer, ret;
+ int s;
+ int level;
+ int optname;
+ int optlen;
+ unsigned char optval[128];
+
+ s = ((int*)_rpc_buffer)[0];
+ level = ((int*)_rpc_buffer)[1];
+ optname = ((int*)_rpc_buffer)[2];
+ optlen = ((int*)_rpc_buffer)[3];
+ memcpy(optval, &_rpc_buffer[4], optlen);
+
+ ret = setsockopt(s, level, optname, optval, optlen);
+ ptr[0] = ret;
+}
+
+void do_gethostbyname( void *rpcBuffer, int size )
+{
+ int *ptr = rpcBuffer, ret;
+ struct in_addr addr;
+
+ ret = gethostbyname((char*)_rpc_buffer, &addr);
+
+ ptr[0] = ret;
+ memcpy(&ptr[1], &addr, sizeof(struct in_addr));
+}
+
void * rpcHandlerFunction(unsigned int command, void * rpcBuffer, int size)
{
@@ -791,6 +878,21 @@
case ID_IOCTL:
do_ioctlsocket(rpcBuffer, size);
break;
+ case ID_GETSOCKNAME:
+ do_getsockname(rpcBuffer, size);
+ break;
+ case ID_GETPEERNAME:
+ do_getpeername(rpcBuffer, size);
+ break;
+ case ID_GETSOCKOPT:
+ do_getsockopt(rpcBuffer, size);
+ break;
+ case ID_SETSOCKOPT:
+ do_setsockopt(rpcBuffer, size);
+ break;
+ case ID_GETHOSTBYNAME:
+ do_gethostbyname(rpcBuffer, size);
+ break;
default:
printf("PS2IPS: Unknown Function called!\n");
@@ -850,3 +952,4 @@
return 0;
}
+
|
|
|
| Back to top |
|
 |
evilo

Joined: 22 Apr 2004 Posts: 230
|
Posted: Fri Jan 19, 2007 5:36 am Post subject: |
|
|
The ntba's libtime (available @ http://www.ntba2.de/) should also make his way into the ps2sdk in order to fully implement time functions from libc.
The lib is almost directly reusable, the only thing IMO would be to check if the library is initialized (timer started) as soon as one of the time function is called. Avoiding to have timer running if you never use them. _________________ http://psxdev.info/evilo/ |
|
| Back to top |
|
 |
jbit Site Admin

Joined: 28 May 2005 Posts: 293 Location: København, Danmark
|
Posted: Fri Jan 19, 2007 7:57 am Post subject: |
|
|
I will look into this tomorrow if nobody else does it in the mean time.
Thanks
[22/01] I havn't forgotten about this, just been a little busy, sorry! |
|
| Back to top |
|
 |
user112
Joined: 11 Apr 2006 Posts: 14
|
Posted: Thu Jul 05, 2007 6:46 am Post subject: |
|
|
| Any progress with that? |
|
| Back to top |
|
 |
ooPo Site Admin
Joined: 17 Jan 2004 Posts: 2032 Location: Canada
|
Posted: Thu Jul 05, 2007 10:01 am Post subject: |
|
|
I've added this patch to the repository.
What's the scoop on the other library? |
|
| Back to top |
|
 |
user112
Joined: 11 Apr 2006 Posts: 14
|
Posted: Thu Jul 05, 2007 11:16 pm Post subject: |
|
|
| Nice, but I think that it's better to move the definitions inside the IOP_PS2IP_H guards at iop/ps2ip.h. |
|
| Back to top |
|
 |
ooPo Site Admin
Joined: 17 Jan 2004 Posts: 2032 Location: Canada
|
Posted: Fri Jul 06, 2007 3:14 am Post subject: |
|
|
| Do up a quick patch and I'll change whatever you want. :) |
|
| Back to top |
|
 |
user112
Joined: 11 Apr 2006 Posts: 14
|
Posted: Fri Jul 06, 2007 5:44 pm Post subject: |
|
|
| Sorry, but I'm of no help with all that Linux stuff. |
|
| Back to top |
|
 |
radad
Joined: 19 May 2004 Posts: 246 Location: Melbourne, Australia
|
Posted: Sat Jul 07, 2007 10:25 pm Post subject: |
|
|
| Done. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|