X-Git-Url: https://git.ucc.asn.au/?p=tpg%2Facess2.git;a=blobdiff_plain;f=Usermode%2FLibraries%2Flibnet.so_src%2Fsocket.c;h=68335acc34828e13375334f8f57b2f779979fab3;hp=85f7e54f28944711b7f026a280625bf3ccd94db7;hb=545c440973f9676efe7cb01edf9ec47b61023513;hpb=732560562067c6ebf5bb380c0d5e6db93518fb49 diff --git a/Usermode/Libraries/libnet.so_src/socket.c b/Usermode/Libraries/libnet.so_src/socket.c index 85f7e54f..68335acc 100644 --- a/Usermode/Libraries/libnet.so_src/socket.c +++ b/Usermode/Libraries/libnet.so_src/socket.c @@ -10,15 +10,23 @@ #include #include -int Net_OpenSocket(int AddrType, void *Addr, const char *Filename) +enum { + UDP_IOCTL_GETSETLPORT = 4, + UDP_IOCTL_GETSETRPORT, + UDP_IOCTL_GETSETRMASK, + UDP_IOCTL_SETRADDR, +}; + +int Net_OpenSocket(int AddrType, const void *Addr, const char *Filename) { int addrLen = Net_GetAddressSize(AddrType); - int i; - uint8_t *addrBuffer = Addr; char hexAddr[addrLen*2+1]; - for( i = 0; i < addrLen; i ++ ) - sprintf(hexAddr+i*2, "%02x", addrBuffer[i]); + { + const uint8_t *addrBuffer = Addr; + for( unsigned int i = 0; i < addrLen; i ++ ) + sprintf(hexAddr+i*2, "%02x", addrBuffer[i]); + } if(Filename) { @@ -37,14 +45,27 @@ int Net_OpenSocket(int AddrType, void *Addr, const char *Filename) } } -int Net_OpenSocket_TCPC(int AddrType, void *Addr, int Port) +int Net_OpenSocket_TCPC(int AddrType, const void *Addr, int Port) { int fd = Net_OpenSocket(AddrType, Addr, "tcpc"); if( fd == -1 ) return -1; _SysIOCtl(fd, 5, &Port); // Remote Port - _SysIOCtl(fd, 6, Addr); // Remote address + _SysIOCtl(fd, 6, (void*)Addr); // Remote address (kernel shouldn't modify) _SysIOCtl(fd, 7, NULL); // connect return fd; } +int Net_OpenSocket_UDP(int AddrType, const void *Addr, int RPort, int LPort) +{ + int fd = Net_OpenSocket(AddrType, Addr, "udp"); + if( fd == -1 ) return -1; + + _SysIOCtl(fd, UDP_IOCTL_GETSETLPORT, &LPort); // Remote Port + int maskbits = Net_GetAddressSize(AddrType) * 8; + _SysIOCtl(fd, UDP_IOCTL_GETSETRPORT, &RPort); + _SysIOCtl(fd, UDP_IOCTL_GETSETRMASK, &maskbits); + _SysIOCtl(fd, UDP_IOCTL_SETRADDR, (void*)Addr); // Remote address (kernel shouldn't modify) + return fd; +} +