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