2 * Acess2 Networking Toolkit
3 * By John Hodge (thePowersGang)
11 #include <acess/sys.h>
14 UDP_IOCTL_GETSETLPORT = 4,
15 UDP_IOCTL_GETSETRPORT,
16 UDP_IOCTL_GETSETRMASK,
20 int Net_OpenSocket(int AddrType, const void *Addr, const char *Filename)
22 int addrLen = Net_GetAddressSize(AddrType);
23 char hexAddr[addrLen*2+1];
26 const uint8_t *addrBuffer = Addr;
27 for( unsigned int i = 0; i < addrLen; i ++ )
28 sprintf(hexAddr+i*2, "%02x", addrBuffer[i]);
33 int len = snprintf(NULL, 0, "/Devices/ip/routes/@%i:%s/%s", AddrType, hexAddr, Filename);
35 snprintf(path, len+1, "/Devices/ip/routes/@%i:%s/%s", AddrType, hexAddr, Filename);
36 _SysDebug("%s", path);
37 return _SysOpen(path, OPENFLAG_READ|OPENFLAG_WRITE);
41 int len = snprintf(NULL, 0, "/Devices/ip/routes/@%i:%s", AddrType, hexAddr);
43 snprintf(path, len+1, "/Devices/ip/routes/@%i:%s", AddrType, hexAddr);
44 return _SysOpen(path, OPENFLAG_READ);
48 int Net_OpenSocket_TCPC(int AddrType, const void *Addr, int Port)
50 int fd = Net_OpenSocket(AddrType, Addr, "tcpc");
51 if( fd == -1 ) return -1;
53 _SysIOCtl(fd, 5, &Port); // Remote Port
54 _SysIOCtl(fd, 6, (void*)Addr); // Remote address (kernel shouldn't modify)
55 _SysIOCtl(fd, 7, NULL); // connect
59 int Net_OpenSocket_UDP(int AddrType, const void *Addr, int RPort, int LPort)
61 int fd = Net_OpenSocket(AddrType, Addr, "udp");
62 if( fd == -1 ) return -1;
64 _SysIOCtl(fd, UDP_IOCTL_GETSETLPORT, &LPort); // Remote Port
65 int maskbits = Net_GetAddressSize(AddrType) * 8;
66 _SysIOCtl(fd, UDP_IOCTL_GETSETRPORT, &RPort);
67 _SysIOCtl(fd, UDP_IOCTL_GETSETRMASK, &maskbits);
68 _SysIOCtl(fd, UDP_IOCTL_SETRADDR, (void*)Addr); // Remote address (kernel shouldn't modify)