19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCopyright (C) 1996-1997 Id Software, Inc. 39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is free software; you can redistribute it and/or 59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammodify it under the terms of the GNU General Public License 69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamas published by the Free Software Foundation; either version 2 79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the License, or (at your option) any later version. 89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is distributed in the hope that it will be useful, 109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambut WITHOUT ANY WARRANTY; without even the implied warranty of 119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSee the GNU General Public License for more details. 149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamYou should have received a copy of the GNU General Public License 169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamalong with this program; if not, write to the Free Software 179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <go32.h> 219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "mpdosock.h" 229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//#include "types.h" 249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef unsigned char BYTE; 259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef unsigned short WORD; 269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef unsigned long DWORD; 279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//#include "lpc.h" 299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short version; // version of LPC requested 319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short sizeOfArgs; // size of arguments 329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short service; // service # requested 339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char Data[1]; // data 349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} LPCData; 359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short version; // LPC version 389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short sizeOfReturn; // return data size 399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short error; // any error codes 409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream short noRet; // number of returns 419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char Data[1]; // data 429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} LPCReturn; 439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//#include "services.h" 459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAXSOCKETS 20 469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// services 489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKBIND 4 499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKGETHOSTBYNAME 5 509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKGETHOSTNAME 6 519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKGETHOSTBYADDR 7 529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKCLOSE 8 539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKSOCKET 9 549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKRECVFROM 10 559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKSENDTO 11 569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKIOCTL 12 579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKGETSOCKNAME 13 589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKFLUSH 14 599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKSETOPT 15 609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKGETLASTERROR 16 619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_SOCKINETADDR 17 629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// htons, ntohs, htonl, ntohl implemented locally 649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// errors 669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_UNRECOGNIZED_SERVICE -1 679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define LPC_NOERROR 0 689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// structures for support 709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int namelen; 739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char name[1]; 749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} BindArgs; 759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream long cmd; 799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char data[1]; 809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} IoctlArgs; 819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int namelen; 859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char name[1]; 869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} GetSockNameRet; 879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef GetSockNameRet GetHostNameRet; 899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int h_addr_0; // that's the only important value 939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} GetHostByNameRet; 949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int len; 979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int type; 989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char addr[1]; 999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} GetHostByAddrArgs; 1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char h_name[1]; // h_name is the only important value 1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} GetHostByAddrRet; 1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int flags; 1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} RecvFromArgs; 1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int errCode; 1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int len; // message len 1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct sockaddr sockaddr; 1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int sockaddrlen; 1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char Data[1]; 1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} RecvFromRet; 1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int flags; 1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int len; 1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct sockaddr sockaddr; 1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int sockaddrlen; 1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char Data[1]; 1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} SendToArgs; 1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int errCode; 1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} SendToRet; 1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int bufflen; 1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int len; 1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int sockaddrlen; 1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct sockaddr address; 1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char data[1]; 1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} SocketChannelData; 1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int af; 1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int type; 1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int protocol; 1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} SocketArgs; 1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int len; 1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int flags; 1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int addrlen; 1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct sockaddr addr; 1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char data[1]; 1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} WinSockData; 1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET s; 1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int level; 1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int optname; 1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int optlen; 1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char optval[1]; 1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} SetSockOptArgs; 1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct { 1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SOCKET sock[MAXSOCKETS]; 1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} SocketMap; 1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//#include "rtq.h" 1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define RTQ_NODE struct rtq_node 1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_NODE 1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *self; // Ring zero address of this node 1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *left; // Ring zero address of preceding node 1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *right; // Ring zero address of succeding node 1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream BYTE * rtqDatum; // Ring 3 Datum of Buffer (start of preface) 1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream BYTE * rtqInsert; // Ring 3 insertion position 1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WORD rtqLen; // Length of buffer, excluding preface 1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WORD rtqUpCtr; // Up Counter of bytes used so far 1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WORD rtqQCtr; // number of nodes attached 1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WORD padding; // DWORD alignment 1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream }; 1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define RTQ_PARAM_MOVENODE struct rtq_param_movenode 1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_PARAM_MOVENODE 1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WORD rtqFromDQ; 1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WORD rtqToDQ; 1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream }; 1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_NODE* rtq_fetch(RTQ_NODE*, RTQ_NODE*); // To, From 1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//#include "mplib.h" 1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// give up time slice 1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Yield(void); 1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid MGenWakeupDll(void); 1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// post a message to win32 side 2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid PostWindowsMessage(void); 2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// get # of items on qNo 2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint MGenGetQueueCtr(int qNo); 2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// move first node from qFrom to qTo 2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_NODE *MGenMoveTo(int qFrom, int qTo); 2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// get first node from q 2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_NODE *MGenGetNode(int q); 2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// get master node, returning size of RTQ_NODE for size verification 2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_NODE *MGenGetMasterNode(unsigned *size); 2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// move all nodes from qFrom to qTo 2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamRTQ_NODE *MGenFlushNodes(int qFrom, int qTo); 2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// count number of nodes in queues designated by bitmask 2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// lowerOrderBits == 0..31, upperOrderBits == 32-63 2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint MGenMCount(unsigned lowerOrderBits, unsigned upperOrderBits); 2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// perform consistency check on chunnel address space 2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint MGenSanityCheck(void); 2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <stdio.h> 2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <sys/farptr.h> 2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern short flat_selector; 2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SOCKET_MAP_QUEUE 41 2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define IDLE_QUEUE 44 2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define REC_QUEUE 45 2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SEND_QUEUE 46 2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// queue sizes 2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQBASE 58 2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQ64 58 2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQ128 59 2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQ256 60 2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQ512 61 2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQ1024 62 2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FREEQ2048 63 2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define NFREEQ 6 2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define QLIMIT 10 2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define PRIVATEQ 50 2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FARPKL(x) (_farnspeekl((unsigned long) x)) 2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FARPKB(x) (_farnspeekb((unsigned long) x)) 2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FARPKS(x) (_farnspeekw((unsigned long) x)) 2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FARPOKL(x, y) (_farnspokel((unsigned long) x, (unsigned long) y)) 2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FARPOKB(x, y) (_farnspokeb((unsigned long) x, (unsigned char) y)) 2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint Qsizes[] = { 64, 128, 256, 512, 1024, 2048 }; 2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint SocketError = 0; 2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSocketMap *SockMap; 2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define HOSTENT_ALIAS_LIMIT 5 2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define HOSTENT_STRLEN_LIMIT 50 2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define HOSTENT_ADDR_LIST_LIMIT 5 2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct hostent HostEnt; 2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar HostEnt_hname[HOSTENT_STRLEN_LIMIT]; 2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar *HostEnt_h_aliases[HOSTENT_ALIAS_LIMIT]; 2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar HostEnt_names[HOSTENT_ALIAS_LIMIT][HOSTENT_STRLEN_LIMIT]; 2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct in_addr* HostEnt_addr_list[HOSTENT_ADDR_LIST_LIMIT]; 2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct in_addr HostEnt_addrs[HOSTENT_ADDR_LIST_LIMIT]; 2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfmemcpyto(void *to, const void *from, int length) 2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream movedata(_my_ds(), (unsigned)from, flat_selector, (unsigned)to, length); 2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfmemcpyfrom(void *to, const void *from, int length) 2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream movedata(flat_selector, (unsigned)from, _my_ds(), (unsigned)to, length); 2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfstrcpyto(char *to, const char *from) 2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (*from) { 2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKB(to, *from); 2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream to++; from++; 2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKB(to, 0); 2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfstrncpyto(char *to, const char *from, int len) 3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (*from && len) { 3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKB(to, *from); 3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream to++; from++; len--; 3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKB(to, 0); 3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfstrcpyfrom(char *to, const char *from) 3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (FARPKB(from)) { 3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *to = FARPKB(from); 3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream from++; to++; 3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *to = 0; 3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfstrncpyfrom(char *to, const char *from, int len) 3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (FARPKB(from) && len) { 3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *to = FARPKB(from); 3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream from++; to++; len--; 3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *to = 0; 3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGetSocketMap(void) 3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(SOCKET_MAP_QUEUE); 3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SockMap = (SocketMap *) FARPKL(&n->rtqDatum); 3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid * 3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGetFreeBufferToQueue(int q, int bufSize) 3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i = 0; i < NFREEQ; i++) { 3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (Qsizes[i] >= bufSize && MGenGetQueueCtr(i+FREEQBASE)) { 3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenMoveTo(i+FREEQBASE, q); 3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!n) 3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream continue; 3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&n->rtqUpCtr, bufSize); 3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return (void *) FARPKL(&n->rtqDatum); 3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return 0; 3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFreeBufferFromQueue(int q) 3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(q); 3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i = 0; i < NFREEQ; i++) { 3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (Qsizes[i] == FARPKS(&n->rtqLen)) { 3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(q, i+FREEQBASE); 3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSetLPCData(LPCData *lpc) 3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&(lpc->version), 1); 3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&(lpc->sizeOfArgs), 0); 3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&(lpc->service), 0); 3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambind(SOCKET s, const struct sockaddr *name, int namelen) 3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream BindArgs *bargs; 3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKBIND); 3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream bargs = (BindArgs *) p->Data; 3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&bargs->s, s); 3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&bargs->namelen, namelen); 3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyto(bargs->name, name, namelen); 3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&r->error) != LPC_NOERROR) { 4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamclosesocket(SOCKET s) 4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 4199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKCLOSE); 4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(p->Data, s); 4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&r->error) != LPC_NOERROR) { 4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 4519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamZapHostEnt() 4529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // do nothing 4549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamReconstructHostEnt(struct hostent *s, void *flattened) 4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct hostent *old = (struct hostent *) flattened; 4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char **ptr; 4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_name = HostEnt_hname; 4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fstrncpyfrom(s->h_name, (char *) FARPKL(&old->h_name), HOSTENT_STRLEN_LIMIT-1); 4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_name[HOSTENT_STRLEN_LIMIT-1] = 0; 4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_aliases = HostEnt_h_aliases; 4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ptr = (char **) FARPKL(&old->h_aliases); 4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i = 0; i < (HOSTENT_ALIAS_LIMIT-1) && FARPKL(ptr); i++, ptr++) { 4719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_aliases[i] = HostEnt_names[i]; 4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // fstrncpyfrom(s->h_aliases[i], (void *) FARPKL(ptr), HOSTENT_STRLEN_LIMIT-1); 4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_aliases[i][HOSTENT_STRLEN_LIMIT-1] = 0; 4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_aliases[i] = 0; 4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_addrtype = FARPKS(&old->h_addrtype); 4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_length = FARPKS(&old->h_length); 4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&old->h_length) != sizeof(struct in_addr)) { 4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream printf("Error!\n"); 4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream exit(0); 4839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_addr_list = (char **) HostEnt_addr_list; 4869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ptr = (char **) FARPKL(&old->h_addr_list); 4879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i = 0; i < (HOSTENT_ADDR_LIST_LIMIT - 1) && FARPKL(ptr); i++, ptr++) { 4889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_addr_list[i] = (char *) &(HostEnt_addrs[i]); 4899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyfrom(s->h_addr_list[i], (void *) FARPKL(ptr), s->h_length); 4909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s->h_addr_list[i] = 0; 4929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 4969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamgetsockname(SOCKET s, struct sockaddr *name, int *namelen) 4979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 4999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 5009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 5019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GetSockNameRet *ret; 5029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 5039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 5059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 5069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 5079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 5089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKGETSOCKNAME); 5099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(p->Data, s); 5109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 5129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 5139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 5159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 5169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 5199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&r->error) != LPC_NOERROR) { 5219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 5229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 5239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ret = (GetSockNameRet *) r->Data; 5259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(&ret->retVal); 5269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyfrom(name, ret->name, FARPKL(&ret->namelen)); 5279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *namelen = FARPKL(&ret->namelen); 5289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 5309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 5319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 5339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 5349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 5369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamgethostname(char *name, int namelen) 5379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 5389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n; 5399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 5409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 5419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GetHostNameRet *ret; 5429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 5439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char *s; 5449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 5469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 5479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream n = (RTQ_NODE *) MGenGetNode(IDLE_QUEUE); 5489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 5499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 5509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service,LPC_SOCKGETHOSTNAME); 5519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 5529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 5539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = (RTQ_NODE *) (MGenGetNode(REC_QUEUE))) == 0) 5559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 5569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 5589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&r->error) != LPC_NOERROR) { 5609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 5619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 5629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ret = (GetHostNameRet *) r->Data; 5649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(&ret->retVal); 5669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s = ret->name; 5689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fstrncpyfrom(name, s, namelen); 5709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if 0 5729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream len = strlen(ret->name); 5739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (len > namelen) 5759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memcpy(name, ret->name, ret->namelen); 5769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 5779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream strcpy(name, ret->name); 5789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 5799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 5819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 5829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 5849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 5859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct hostent * 5879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamgethostbyname(const char *name) 5889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 5899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 5909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 5919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 5929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct hostent *retVal; 5939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 5959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 5969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 5979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 5989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKGETHOSTBYNAME); 5999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fstrcpyto(p->Data, name); 6009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 6029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 6039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 6059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 6069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 6089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = (struct hostent *) r->Data; 6099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKL(&retVal->h_name) == 0) { 6119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = 0; 6129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } else { 6139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ZapHostEnt(); 6149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ReconstructHostEnt(&HostEnt, (void *) retVal); 6159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = &HostEnt; 6169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 6179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 6199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 6209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 6229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 6239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstruct hostent * 6259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamgethostbyaddr(const char *addr, int len, int type) 6269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 6279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 6289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 6299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 6309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GetHostByAddrArgs *args; 6319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct hostent *retVal; 6329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 6349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 6359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 6369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 6379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKGETHOSTBYADDR); 6389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream args = (GetHostByAddrArgs *) p->Data; 6399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->len, len); 6409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->type, type); 6419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyto(args->addr, addr, len); 6429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 6449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 6459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 6479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 6489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 6499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = (struct hostent *) r->Data; 6509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKL(&retVal->h_name) == 0) { 6529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = 0; 6539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } else { 6549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ZapHostEnt(); 6559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ReconstructHostEnt(&HostEnt, (void *) retVal); 6579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = &HostEnt; 6589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 6599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 6619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 6629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 6649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 6659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSOCKET 6689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsocket(int af, int type, int protocol) 6699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 6709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 6719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 6729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 6739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketArgs *args; 6749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 6759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 6779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 6789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 6799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 6809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKSOCKET); 6819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream args = (SocketArgs *) p->Data; 6829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->af, af); 6839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->type, type); 6849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->protocol, protocol); 6859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 6879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 6889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 6909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 6919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 6939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&r->error) != LPC_NOERROR) { 6969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 6979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 6989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 7009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 7029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 7039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 7059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 7069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid 7089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsockets_flush(void) 7099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 7109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 7119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 7129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 7149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 7159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 7169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKFLUSH); 7179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 7199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 7209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 7229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 7239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 7259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 7269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 7289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamrecvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, 7299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int *fromlen) 7309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 7319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 7329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n; 7339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WinSockData *data; 7349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int bytesRead; 7359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 7379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 7389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!SockMap) 7399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GetSocketMap(); 7409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i = 0; i < MAXSOCKETS; i++) { 7429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKL(&(SockMap->sock[i])) == s) 7439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream break; 7449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (i == MAXSOCKETS) 7479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return SOCKET_ERROR; 7489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // pick up node 7509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream n = MGenGetNode(i); 7519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (n == 0) { 7529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = WSAEWOULDBLOCK; 7539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 7549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream data = (WinSockData *) FARPKL(&n->rtqDatum); 7579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream bytesRead = FARPKL(&data->len); 7589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (from) { 7609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyfrom(from, &data->addr, sizeof(struct sockaddr)); 7619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (fromlen) { 7649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *fromlen = FARPKL(&data->addrlen); 7659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyfrom(buf, data->data, len > bytesRead ? bytesRead : len); 7689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if ((flags & MSG_PEEK) == 0) { 7709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FreeBufferFromQueue(i); 7719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return bytesRead; 7749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 7759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 7779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen) 7789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 7799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 7809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int outQ; 7819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream WinSockData *data; 7829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 7849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 7859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!SockMap) 7869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GetSocketMap(); 7879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i = 0; i < MAXSOCKETS; i++) { 7899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKL(&SockMap->sock[i]) == s) { 7909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream break; 7919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (i == MAXSOCKETS) { 7959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = WSAENOTSOCK; 7969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return SOCKET_ERROR; 7979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream outQ = i + MAXSOCKETS; 8009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (MGenGetQueueCtr(outQ) >= QLIMIT) { 8029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = WSAEWOULDBLOCK; 8039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return SOCKET_ERROR; 8049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 8059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream data = GetFreeBufferToQueue(PRIVATEQ, len + sizeof(WinSockData)); 8079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!data) { 8099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = WSAEWOULDBLOCK; 8109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return SOCKET_ERROR; 8119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 8129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&data->s, s); 8149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&data->len, len); 8159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (to) { 8169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyto(&data->addr, to, tolen); 8179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&data->addrlen, tolen); 8189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } else { 8199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&data->addrlen, 0); 8209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 8219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&data->flags, flags); 8239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyto(data->data, buf, len); 8259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(PRIVATEQ, outQ); 8279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return len; 8299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 8309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 8329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamioctlsocket(SOCKET s, long cmd, unsigned long *argp) 8339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 8349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 8359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 8369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 8379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream IoctlArgs *args; 8389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 8399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 8419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 8429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 8439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 8449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKIOCTL); 8459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream args = (IoctlArgs *) p->Data; 8469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->s, s); 8479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->cmd, cmd); 8489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream switch(cmd) { 8509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream case FIONBIO: 8519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(args->data, *argp); 8529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream break; 8539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream default: 8549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return SOCKET_ERROR; 8559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 8569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 8589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 8599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 8619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 8629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 8649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 8679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 8699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 8709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 8729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 8739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 8759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsetsockopt(SOCKET s, int level, int optname, const char *optval, int optlen) 8769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 8779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 8789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 8799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 8809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetSockOptArgs *args; 8819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 8829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 8849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 8859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 8869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 8879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKSETOPT); 8889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream args = (SetSockOptArgs *) p->Data; 8899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->s, s); 8909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->level, level); 8919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->optname, optname); 8929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&args->optlen, optlen); 8939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fmemcpyto(args->optval, optval, optlen); 8949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 8969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 8979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 8999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 9009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 9029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 9049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 9069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 9079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 9099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint 9129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamWSAGetLastError(void) 9139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 9159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 9169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 9179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 9189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 9219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (SocketError) { 9229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int err = SocketError; 9239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 9259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return err; 9269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 9279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 9299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 9309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKGETLASTERROR); 9319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 9339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 9349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 9369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 9379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 9399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 9429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 9449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 9459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 9479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamunsigned long inet_addr(const char *cp) 9509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int ret; 9529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned int ha1, ha2, ha3, ha4; 9539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned long ipaddr; 9549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ret = sscanf(cp, "%d.%d.%d.%d", &ha1, &ha2, &ha3, &ha4); 9569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (ret != 4) 9579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 9589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ipaddr = (ha1 << 24) | (ha2 << 16) | (ha3 << 8) | ha4; 9599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return ipaddr; 9609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if 0 9619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); 9629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCData *p; 9639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream LPCReturn *r; 9649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int retVal; 9659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SocketError = 0; 9679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream _farsetsel(flat_selector); 9689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = (LPCData *) FARPKL(&n->rtqDatum); 9699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SetLPCData(p); 9709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream FARPOKL(&p->service, LPC_SOCKINETADDR); 9719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fstrcpyto(p->Data, cp); 9739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); 9759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream PostWindowsMessage(); 9769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while ((n = MGenGetNode(REC_QUEUE)) == 0) 9789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Yield(); 9799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (LPCReturn *) FARPKL(&n->rtqDatum); 9819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (FARPKS(&r->error) != LPC_NOERROR) { 9839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 9849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 9859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream retVal = FARPKL(r->Data); 9879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get ready for next call 9899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream MGenMoveTo(REC_QUEUE, IDLE_QUEUE); 9909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return retVal; 9929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream #endif 9939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamchar *inet_ntoa (struct in_addr in) 9969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream static char buf [32]; 9989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream sprintf(buf, "%u.%u.%u.%u", in.S_un.S_un_b.s_b1, in.S_un.S_un_b.s_b2, in.S_un.S_un_b.s_b3, in.S_un.S_un_b.s_b4); 10009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return buf; 10019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 1002