forums.ps2dev.org Forum Index forums.ps2dev.org
Homebrew PS2, PSP & PS3 Development Discussions
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

ntba2's tcpip-additions committable to svn?

 
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development
View previous topic :: View next topic  
Author Message
Henk



Joined: 29 Dec 2006
Posts: 14

PostPosted: Thu Jan 18, 2007 11:56 am    Post subject: ntba2's tcpip-additions committable to svn? Reply with quote

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
View user's profile Send private message
evilo



Joined: 22 Apr 2004
Posts: 230

PostPosted: Fri Jan 19, 2007 5:36 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
jbit
Site Admin


Joined: 28 May 2005
Posts: 293
Location: København, Danmark

PostPosted: Fri Jan 19, 2007 7:57 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
user112



Joined: 11 Apr 2006
Posts: 14

PostPosted: Thu Jul 05, 2007 6:46 am    Post subject: Reply with quote

Any progress with that?
Back to top
View user's profile Send private message
ooPo
Site Admin


Joined: 17 Jan 2004
Posts: 2032
Location: Canada

PostPosted: Thu Jul 05, 2007 10:01 am    Post subject: Reply with quote

I've added this patch to the repository.

What's the scoop on the other library?
Back to top
View user's profile Send private message Visit poster's website
user112



Joined: 11 Apr 2006
Posts: 14

PostPosted: Thu Jul 05, 2007 11:16 pm    Post subject: Reply with quote

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
View user's profile Send private message
ooPo
Site Admin


Joined: 17 Jan 2004
Posts: 2032
Location: Canada

PostPosted: Fri Jul 06, 2007 3:14 am    Post subject: Reply with quote

Do up a quick patch and I'll change whatever you want. :)
Back to top
View user's profile Send private message Visit poster's website
user112



Joined: 11 Apr 2006
Posts: 14

PostPosted: Fri Jul 06, 2007 5:44 pm    Post subject: Reply with quote

Sorry, but I'm of no help with all that Linux stuff.
Back to top
View user's profile Send private message
radad



Joined: 19 May 2004
Posts: 246
Location: Melbourne, Australia

PostPosted: Sat Jul 07, 2007 10:25 pm    Post subject: Reply with quote

Done.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development All times are GMT + 10 Hours
Page 1 of 1

 
Jump to:  
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