source: trunk/src/wsock32/new/wsock32.cpp@ 1881

Last change on this file since 1881 was 1881, checked in by phaller, 26 years ago

Fix: with handle translation fix

File size: 32.2 KB
Line 
1/* $Id: wsock32.cpp,v 1.5 1999-11-29 22:23:07 phaller Exp $ */
2
3/*
4 *
5 * Project Odin Software License can be found in LICENSE.TXT
6 *
7 * Win32 SOCK32 for OS/2
8 *
9 * Copyright (C) 1999 Patrick Haller <phaller@gmx.net>
10 *
11 */
12
13/* Remark:
14 * 1999/11/21 experimental rewrite using IBM's PMWSock only
15 * -> some structural differences remain! (hostent)
16 * -> this cannot work yet!
17 *
18 * identical structures:
19 * - sockaddr_in
20 * - WSADATA
21 * - sockaddr
22 * - fd_set
23 * - timeval
24 *
25 * incompatible structures:
26 * - hostent
27 * - netent
28 * - servent
29 * - protent
30 * - linger
31 */
32
33
34/*****************************************************************************
35 * Includes *
36 *****************************************************************************/
37
38#include <pmwsock.h>
39#include <odin.h>
40#include <odinwrap.h>
41#include <os2sel.h>
42#include <misc.h>
43#include <wprocess.h>
44#include <heapstring.h>
45#include <win32wnd.h>
46
47#include "wsock32.h"
48
49
50ODINDEBUGCHANNEL(WSOCK32-WSOCK32)
51
52
53/*****************************************************************************
54 * Local variables *
55 *****************************************************************************/
56
57#define ERROR_SUCCESS 0
58
59
60static WSOCKTHREADDATA wstdFallthru; // for emergency only
61
62
63/*****************************************************************************
64 * Name :
65 * Purpose :
66 * Parameters:
67 * Variables :
68 * Result :
69 * Remark : free memory when thread dies
70 * Status : UNTESTED STUB
71 *
72 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
73 *****************************************************************************/
74
75PWSOCKTHREADDATA iQueryWsockThreadData(void)
76{
77 struct _THDB* pThreadDB = (struct _THDB*)GetThreadTHDB();
78 PWSOCKTHREADDATA pwstd;
79
80 // check for existing pointer
81 if (pThreadDB != NULL)
82 {
83 if (pThreadDB->pWsockData == NULL)
84 {
85 // allocate on demand + initialize
86 pwstd = (PWSOCKTHREADDATA)HEAP_malloc (sizeof(WSOCKTHREADDATA));
87 pThreadDB->pWsockData = (LPVOID)pwstd;
88 }
89 else
90 // use already allocated memory
91 pwstd = (PWSOCKTHREADDATA)pThreadDB->pWsockData;
92 }
93
94 if (pwstd == NULL)
95 pwstd = &wstdFallthru; // no memory and not allocated already
96
97 return pwstd;
98}
99
100
101#if 0
102/*****************************************************************************
103 * Name :
104 * Purpose :
105 * Parameters:
106 * Variables :
107 * Result :
108 * Remark :
109 * Status : UNTESTED STUB
110 *
111 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
112 *****************************************************************************/
113
114#define CASEERR2(a) case SOC##a: case a: return WSA##a;
115#define CASEERR1(a) case SOC##a: return WSA##a;
116
117int iTranslateSockErrToWSock(int iError)
118{
119 switch(iError)
120 {
121 CASEERR2(EINTR)
122 CASEERR2(EBADF)
123 CASEERR2(EACCES)
124 CASEERR2(EINVAL)
125 CASEERR2(EMFILE)
126
127 CASEERR1(EWOULDBLOCK)
128 CASEERR1(EINPROGRESS)
129 CASEERR1(EALREADY)
130 CASEERR1(ENOTSOCK)
131// CASEERR1(EDESTADRREQ)
132 CASEERR1(EMSGSIZE)
133 CASEERR1(EPROTOTYPE)
134 CASEERR1(ENOPROTOOPT)
135 CASEERR1(EPROTONOSUPPORT)
136 CASEERR1(ESOCKTNOSUPPORT)
137 CASEERR1(EOPNOTSUPP)
138 CASEERR1(EPFNOSUPPORT)
139 CASEERR1(EAFNOSUPPORT)
140 CASEERR1(EADDRINUSE)
141 CASEERR1(EADDRNOTAVAIL)
142 CASEERR1(ENETDOWN)
143 CASEERR1(ENETUNREACH)
144 CASEERR1(ENETRESET)
145 CASEERR1(ECONNABORTED)
146 CASEERR1(ECONNRESET)
147 CASEERR1(ENOBUFS)
148 CASEERR1(EISCONN)
149 CASEERR1(ENOTCONN)
150 CASEERR1(ESHUTDOWN)
151 CASEERR1(ETOOMANYREFS)
152 CASEERR1(ETIMEDOUT)
153 CASEERR1(ECONNREFUSED)
154 CASEERR1(ELOOP)
155 CASEERR1(ENAMETOOLONG)
156 CASEERR1(EHOSTDOWN)
157 CASEERR1(EHOSTUNREACH)
158
159 CASEERR1(ENOTEMPTY)
160// CASEERR(EPROCLIM)
161// CASEERR(EUSERS)
162// CASEERR(EDQUOT)
163// CASEERR(ESTALE)
164// CASEERR(EREMOTE)
165// CASEERR(EDISCON)
166
167
168 default:
169 dprintf(("WSOCK32: Unknown error condition: %d\n",
170 iError));
171 return iError;
172 }
173}
174
175#endif
176
177
178
179
180
181
182
183/*****************************************************************************
184 * Name :
185 * Purpose :
186 * Parameters:
187 * Variables :
188 * Result :
189 * Remark :
190 * Status : UNTESTED STUB
191 *
192 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
193 *****************************************************************************/
194
195
196ODINPROCEDURE1(OS2WSASetLastError,
197 int,iError)
198{
199 WSASetLastError(iError);
200}
201
202
203/*****************************************************************************
204 * Name :
205 * Purpose :
206 * Parameters:
207 * Variables :
208 * Result :
209 * Remark :
210 * Status : UNTESTED STUB
211 *
212 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
213 *****************************************************************************/
214
215ODINFUNCTION0(int,OS2WSAGetLastError)
216{
217 return WSAGetLastError();
218}
219
220
221/*****************************************************************************
222 * Name :
223 * Purpose :
224 * Parameters:
225 * Variables :
226 * Result :
227 * Remark :
228 * Status : UNTESTED STUB
229 *
230 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
231 *****************************************************************************/
232
233ODINFUNCTION2(int,OS2__WSAFDIsSet,SOCKET, s,
234 fd_set*,fds)
235{
236 return (__WSAFDIsSet(s,fds));
237}
238
239
240/*****************************************************************************
241 * Name :
242 * Purpose :
243 * Parameters:
244 * Variables :
245 * Result :
246 * Remark :
247 * Status : UNTESTED STUB
248 *
249 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
250 *****************************************************************************/
251
252ODINFUNCTION3(SOCKET,OS2accept, SOCKET, s,
253 struct sockaddr *,addr,
254 int *, addrlen)
255{
256 return(accept(s,addr,addrlen));
257}
258
259
260/*****************************************************************************
261 * Name :
262 * Purpose :
263 * Parameters:
264 * Variables :
265 * Result :
266 * Remark :
267 * Status : UNTESTED STUB
268 *
269 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
270 *****************************************************************************/
271
272ODINFUNCTION3(int,OS2bind,
273 SOCKET ,s,
274 const struct sockaddr *,addr,
275 int, namelen)
276{
277 return(bind(s,addr,namelen));
278}
279
280
281/*****************************************************************************
282 * Name :
283 * Purpose :
284 * Parameters:
285 * Variables :
286 * Result :
287 * Remark :
288 * Status : UNTESTED STUB
289 *
290 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
291 *****************************************************************************/
292
293ODINFUNCTION1(int,OS2closesocket,SOCKET, s)
294{
295 return(closesocket(s));
296}
297
298
299/*****************************************************************************
300 * Name :
301 * Purpose :
302 * Parameters:
303 * Variables :
304 * Result :
305 * Remark :
306 * Status : UNTESTED STUB
307 *
308 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
309 *****************************************************************************/
310
311ODINFUNCTION3(int,OS2connect,
312 SOCKET, s,
313 const struct sockaddr *,name,
314 int, namelen)
315{
316 return(connect(s,name,namelen));
317}
318
319
320/*****************************************************************************
321 * Name :
322 * Purpose :
323 * Parameters:
324 * Variables :
325 * Result :
326 * Remark :
327 * Status : UNTESTED STUB
328 *
329 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
330 *****************************************************************************/
331
332ODINFUNCTION3(int,OS2ioctlsocket,
333 SOCKET,s,
334 long, cmd,
335 u_long *,argp)
336{
337 return(ioctlsocket(s,cmd,argp));
338}
339
340
341/*****************************************************************************
342 * Name :
343 * Purpose :
344 * Parameters:
345 * Variables :
346 * Result :
347 * Remark :
348 * Status : UNTESTED STUB
349 *
350 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
351 *****************************************************************************/
352
353ODINFUNCTION3(int,OS2getpeername,
354 SOCKET, s,
355 struct sockaddr *,name,
356 int *, namelen)
357{
358 return(getpeername(s,name,namelen));
359}
360
361
362/*****************************************************************************
363 * Name :
364 * Purpose :
365 * Parameters:
366 * Variables :
367 * Result :
368 * Remark :
369 * Status : UNTESTED STUB
370 *
371 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
372 *****************************************************************************/
373
374ODINFUNCTION3(int,OS2getsockname,
375 SOCKET,s,
376 struct sockaddr *,name,
377 int *, namelen)
378{
379 return(getsockname(s,name,namelen));
380}
381
382
383/*****************************************************************************
384 * Name :
385 * Purpose :
386 * Parameters:
387 * Variables :
388 * Result :
389 * Remark :
390 * Status : UNTESTED STUB
391 *
392 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
393 *****************************************************************************/
394
395ODINFUNCTION5(int,OS2getsockopt,
396 SOCKET, s,
397 int, level,
398 int, optname,
399 char *, optval,
400 int *,optlen)
401{
402 return(getsockopt(s,
403 level,
404 optname,
405 optval,
406 optlen));
407}
408
409
410/*****************************************************************************
411 * Name :
412 * Purpose :
413 * Parameters:
414 * Variables :
415 * Result :
416 * Remark :
417 * Status : UNTESTED STUB
418 *
419 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
420 *****************************************************************************/
421
422ODINFUNCTION1(u_long,OS2htonl,
423 u_long,hostlong)
424{
425 return(htonl(hostlong));
426}
427
428
429/*****************************************************************************
430 * Name :
431 * Purpose :
432 * Parameters:
433 * Variables :
434 * Result :
435 * Remark :
436 * Status : UNTESTED STUB
437 *
438 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
439 *****************************************************************************/
440
441ODINFUNCTION1(u_short,OS2htons,
442 u_short,hostshort)
443{
444 return(htons(hostshort));
445}
446
447
448/*****************************************************************************
449 * Name :
450 * Purpose :
451 * Parameters:
452 * Variables :
453 * Result :
454 * Remark :
455 * Status : UNTESTED STUB
456 *
457 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
458 *****************************************************************************/
459
460ODINFUNCTION1(unsigned long,OS2inet_addr,
461 const char *, cp)
462{
463 dprintf(("WSOCK32: OS2inet_addr(%s)\n",
464 cp));
465
466 return (inet_addr(cp));
467}
468
469
470/*****************************************************************************
471 * Name :
472 * Purpose :
473 * Parameters:
474 * Variables :
475 * Result :
476 * Remark :
477 * Status : UNTESTED STUB
478 *
479 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
480 *****************************************************************************/
481
482ODINFUNCTION1(char *,OS2inet_ntoa,
483 struct in_addr, in)
484{
485 return(inet_ntoa(in));
486}
487
488
489/*****************************************************************************
490 * Name :
491 * Purpose :
492 * Parameters:
493 * Variables :
494 * Result :
495 * Remark :
496 * Status : UNTESTED STUB
497 *
498 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
499 *****************************************************************************/
500
501ODINFUNCTION2(int,OS2listen,
502 SOCKET, s,
503 int, backlog)
504{
505 return(listen(s,backlog));
506}
507
508
509/*****************************************************************************
510 * Name :
511 * Purpose :
512 * Parameters:
513 * Variables :
514 * Result :
515 * Remark :
516 * Status : UNTESTED STUB
517 *
518 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
519 *****************************************************************************/
520
521ODINFUNCTION1(u_long,OS2ntohl,
522 u_long,netlong)
523{
524 return(ntohl(netlong));
525}
526
527
528/*****************************************************************************
529 * Name :
530 * Purpose :
531 * Parameters:
532 * Variables :
533 * Result :
534 * Remark :
535 * Status : UNTESTED STUB
536 *
537 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
538 *****************************************************************************/
539
540ODINFUNCTION1(u_short,OS2ntohs,
541 u_short,netshort)
542{
543 return(ntohs(netshort));
544}
545
546
547/*****************************************************************************
548 * Name :
549 * Purpose :
550 * Parameters:
551 * Variables :
552 * Result :
553 * Remark :
554 * Status : UNTESTED STUB
555 *
556 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
557 *****************************************************************************/
558
559ODINFUNCTION4(int,OS2recv,
560 SOCKET,s,
561 char *,buf,
562 int,len,
563 int,flags)
564{
565 return(recv(s,
566 buf,
567 len,
568 flags));
569}
570
571
572/*****************************************************************************
573 * Name :
574 * Purpose :
575 * Parameters:
576 * Variables :
577 * Result :
578 * Remark :
579 * Status : UNTESTED STUB
580 *
581 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
582 *****************************************************************************/
583
584ODINFUNCTION6(int,OS2recvfrom,
585 SOCKET,s,
586 char *,buf,
587 int,len,
588 int,flags,
589 struct sockaddr *,from,
590 int *,fromlen)
591{
592
593 return(recvfrom(s,
594 buf,
595 len,
596 flags,
597 from,
598 fromlen));
599}
600
601
602/*****************************************************************************
603 * Name :
604 * Purpose :
605 * Parameters:
606 * Variables :
607 * Result :
608 * Remark :
609 * Status : UNTESTED STUB
610 *
611 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
612 *****************************************************************************/
613
614ODINFUNCTION5(int,OS2select,
615 int,nfds,
616 fd_set *,readfds,
617 fd_set *,writefds,
618 fd_set *,exceptfds,
619 const struct timeval *,timeout)
620{
621 return(select(nfds,
622 readfds,
623 writefds,
624 exceptfds,
625 timeout));
626}
627
628
629/*****************************************************************************
630 * Name :
631 * Purpose :
632 * Parameters:
633 * Variables :
634 * Result :
635 * Remark :
636 * Status : UNTESTED STUB
637 *
638 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
639 *****************************************************************************/
640
641ODINFUNCTION4(int,OS2send,
642 SOCKET,s,
643 const char *,buf,
644 int,len,
645 int,flags)
646{
647 return(send(s,
648 buf,
649 len,
650 flags));
651}
652
653
654/*****************************************************************************
655 * Name :
656 * Purpose :
657 * Parameters:
658 * Variables :
659 * Result :
660 * Remark :
661 * Status : UNTESTED STUB
662 *
663 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
664 *****************************************************************************/
665
666ODINFUNCTION6(int,OS2sendto,
667 SOCKET,s,
668 const char *,buf,
669 int,len,
670 int,flags,
671 const struct sockaddr *,to,
672 int,tolen)
673{
674 return(sendto(s,
675 buf,
676 len,
677 flags,
678 to,
679 tolen));
680}
681
682
683/*****************************************************************************
684 * Name :
685 * Purpose :
686 * Parameters:
687 * Variables :
688 * Result :
689 * Remark :
690 * Status : UNTESTED STUB
691 *
692 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
693 *****************************************************************************/
694
695ODINFUNCTION5(int,OS2setsockopt,
696 SOCKET,s,
697 int,level,
698 int,optname,
699 const char *,optval,
700 int,optlen)
701{
702 struct Wlinger *yy;
703 struct linger xx;
704 int rc;
705
706 if(level == SOL_SOCKET &&
707 optname == SO_LINGER)
708 {
709 yy = (struct Wlinger *)optval;
710 xx.l_onoff = (int)yy->l_onoff;
711 xx.l_linger = (int)yy->l_linger;
712
713 rc = setsockopt(s,level,optname,(char *)&xx,optlen);
714 }
715 else
716 rc = setsockopt(s,level,optname,(char *)optval,optlen);
717
718 if (rc == SOCKET_ERROR)
719 //OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
720 OS2WSASetLastError(WSAEINVAL);
721 else
722 OS2WSASetLastError(ERROR_SUCCESS);
723
724 return rc;
725}
726
727
728/*****************************************************************************
729 * Name :
730 * Purpose :
731 * Parameters:
732 * Variables :
733 * Result :
734 * Remark :
735 * Status : UNTESTED STUB
736 *
737 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
738 *****************************************************************************/
739
740ODINFUNCTION2(int,OS2shutdown,
741 SOCKET,s,
742 int,how)
743{
744 return(shutdown(s,
745 how));
746}
747
748
749/*****************************************************************************
750 * Name :
751 * Purpose :
752 * Parameters:
753 * Variables :
754 * Result :
755 * Remark :
756 * Status : UNTESTED STUB
757 *
758 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
759 *****************************************************************************/
760
761ODINFUNCTION3(SOCKET,OS2socket,
762 int,af,
763 int,type,
764 int,protocol)
765{
766 return(socket(af,
767 type,
768 protocol));
769}
770
771
772/* Database function prototypes */
773
774/*****************************************************************************
775 * Name :
776 * Purpose :
777 * Parameters:
778 * Variables :
779 * Result :
780 * Remark :
781 * Status : UNTESTED STUB
782 *
783 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
784 *****************************************************************************/
785
786ODINFUNCTION3(struct Whostent *,OS2gethostbyaddr,
787 const char *,addr,
788 int,len,
789 int,type)
790{
791 WHOSTENT *yy;
792 struct hostent *xx;
793 PWSOCKTHREADDATA pwstd;
794
795 xx = gethostbyaddr((char *)addr,len,type);
796 //PH: we assume PMWSOCK sets WSASetLastError correctly!
797
798 if(xx == NULL)
799 return (WHOSTENT *)NULL;
800
801 // access current thread wsock data block
802 pwstd = iQueryWsockThreadData();
803
804 pwstd->whsnt.h_name = xx->h_name;
805 pwstd->whsnt.h_aliases = xx->h_aliases;
806 pwstd->whsnt.h_addrtype = (short)xx->h_addrtype;
807 pwstd->whsnt.h_length = (short)xx->h_length;
808 pwstd->whsnt.h_addr_list = xx->h_addr_list;
809
810 return &pwstd->whsnt;
811}
812
813
814/*****************************************************************************
815 * Name :
816 * Purpose :
817 * Parameters:
818 * Variables :
819 * Result :
820 * Remark :
821 * Status : UNTESTED STUB
822 *
823 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
824 *****************************************************************************/
825
826ODINFUNCTION1(struct Whostent *,OS2gethostbyname,
827 const char *,name)
828{
829 WHOSTENT *yy;
830 struct hostent *xx;
831 PWSOCKTHREADDATA pwstd;
832
833
834 xx = gethostbyname((char *)name);
835 //PH: we assume PMWSOCK sets WSASetLastError correctly!
836
837 if(xx == NULL)
838 return (WHOSTENT *)NULL;
839
840 // access current thread wsock data block
841 pwstd = iQueryWsockThreadData();
842
843 pwstd->whsnt.h_name = xx->h_name;
844 pwstd->whsnt.h_aliases = xx->h_aliases;
845 pwstd->whsnt.h_addrtype = (short)xx->h_addrtype;
846 pwstd->whsnt.h_length = (short)xx->h_length;
847 pwstd->whsnt.h_addr_list = xx->h_addr_list;
848
849 return &pwstd->whsnt;
850}
851
852
853/*****************************************************************************
854 * Name :
855 * Purpose :
856 * Parameters:
857 * Variables :
858 * Result :
859 * Remark :
860 * Status : UNTESTED STUB
861 *
862 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
863 *****************************************************************************/
864
865ODINFUNCTION2(int,OS2gethostname,
866 char *,name,
867 int,namelen)
868{
869 //PH: we assume PMWSOCK sets WSASetLastError correctly!
870 return(gethostname(name,
871 namelen));
872}
873
874
875/*****************************************************************************
876 * Name :
877 * Purpose :
878 * Parameters:
879 * Variables :
880 * Result :
881 * Remark :
882 * Status : UNTESTED STUB
883 *
884 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
885 *****************************************************************************/
886
887ODINFUNCTION2(struct Wservent *,OS2getservbyport,
888 int,port,
889 const char *, proto)
890{
891 struct servent *xx;
892 PWSOCKTHREADDATA pwstd;
893
894 //PH: we assume PMWSOCK sets WSASetLastError correctly!
895 xx = getservbyport(port,(char *)proto);
896
897 if(xx == NULL)
898 return (WSERVENT *)NULL;
899
900 // access current thread wsock data block
901 pwstd = iQueryWsockThreadData();
902
903 pwstd->wsvnt.s_name = xx->s_name;
904 pwstd->wsvnt.s_aliases = xx->s_aliases;
905 pwstd->wsvnt.s_port = (short)xx->s_port;
906 pwstd->wsvnt.s_proto = xx->s_proto;
907
908 return &pwstd->wsvnt;
909}
910
911
912/*****************************************************************************
913 * Name :
914 * Purpose :
915 * Parameters:
916 * Variables :
917 * Result :
918 * Remark :
919 * Status : UNTESTED STUB
920 *
921 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
922 *****************************************************************************/
923
924ODINFUNCTION2(struct Wservent *,OS2getservbyname,
925 const char *,name,
926 const char *,proto)
927{
928 WSERVENT *yy;
929 struct servent *xx;
930 PWSOCKTHREADDATA pwstd;
931
932
933 //PH: we assume PMWSOCK sets WSASetLastError correctly!
934 xx = getservbyname((char *)name,(char *)proto);
935
936 if(xx == NULL)
937 return (WSERVENT *)NULL;
938
939 // access current thread wsock data block
940 pwstd = iQueryWsockThreadData();
941
942 pwstd->wsvnt.s_name = xx->s_name;
943 pwstd->wsvnt.s_aliases = xx->s_aliases;
944 pwstd->wsvnt.s_port = (short)xx->s_port;
945 pwstd->wsvnt.s_proto = xx->s_proto;
946
947 return &pwstd->wsvnt;
948}
949
950
951/*****************************************************************************
952 * Name :
953 * Purpose :
954 * Parameters:
955 * Variables :
956 * Result :
957 * Remark :
958 * Status : UNTESTED STUB
959 *
960 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
961 *****************************************************************************/
962
963ODINFUNCTION1(struct Wprotoent *,OS2getprotobynumber,
964 int,proto)
965{
966 struct protoent *xx;
967 PWSOCKTHREADDATA pwstd;
968
969 //PH: we assume PMWSOCK sets WSASetLastError correctly!
970 xx = getprotobynumber(proto);
971
972 if(xx == NULL)
973 return (WPROTOENT *)NULL;
974
975 // access current thread wsock data block
976 pwstd = iQueryWsockThreadData();
977
978 pwstd->wptnt.p_name = xx->p_name;
979 pwstd->wptnt.p_aliases = xx->p_aliases;
980 pwstd->wptnt.p_proto = (short)xx->p_proto;
981
982 return &pwstd->wptnt;
983}
984
985
986/*****************************************************************************
987 * Name :
988 * Purpose :
989 * Parameters:
990 * Variables :
991 * Result :
992 * Remark :
993 * Status : UNTESTED STUB
994 *
995 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
996 *****************************************************************************/
997
998ODINFUNCTION1(struct Wprotoent *,OS2getprotobyname,
999 const char *,name)
1000{
1001 struct protoent *xx;
1002 PWSOCKTHREADDATA pwstd;
1003
1004 //PH: we assume PMWSOCK sets WSASetLastError correctly!
1005 xx = getprotobyname((char *)name);
1006
1007 if(xx == NULL)
1008 return (WPROTOENT *)NULL;
1009
1010 // access current thread wsock data block
1011 pwstd = iQueryWsockThreadData();
1012
1013 pwstd->wptnt.p_name = xx->p_name;
1014 pwstd->wptnt.p_aliases = xx->p_aliases;
1015 pwstd->wptnt.p_proto = (short)xx->p_proto;
1016
1017 return &pwstd->wptnt;
1018}
1019
1020
1021
1022/* Microsoft Windows Extension function prototypes */
1023
1024/*****************************************************************************
1025 * Name :
1026 * Purpose :
1027 * Parameters:
1028 * Variables :
1029 * Result :
1030 * Remark :
1031 * Status : UNTESTED STUB
1032 *
1033 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1034 *****************************************************************************/
1035
1036ODINFUNCTION2(int,OS2WSAStartup,
1037 USHORT,wVersionRequired,
1038 LPWSADATA,lpWSAData)
1039{
1040 return(WSAStartup(wVersionRequired,
1041 lpWSAData));
1042}
1043
1044
1045/*****************************************************************************
1046 * Name :
1047 * Purpose :
1048 * Parameters:
1049 * Variables :
1050 * Result :
1051 * Remark :
1052 * Status : UNTESTED STUB
1053 *
1054 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1055 *****************************************************************************/
1056
1057ODINFUNCTION0(int,OS2WSACleanup)
1058{
1059 return(WSACleanup());
1060}
1061
1062
1063/*****************************************************************************
1064 * Name :
1065 * Purpose :
1066 * Parameters:
1067 * Variables :
1068 * Result :
1069 * Remark :
1070 * Status : UNTESTED STUB
1071 *
1072 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1073 *****************************************************************************/
1074
1075ODINFUNCTION0(BOOL,OS2WSAIsBlocking)
1076{
1077 return WSAIsBlocking();
1078}
1079
1080
1081/*****************************************************************************
1082 * Name :
1083 * Purpose :
1084 * Parameters:
1085 * Variables :
1086 * Result :
1087 * Remark :
1088 * Status : UNTESTED STUB
1089 *
1090 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1091 *****************************************************************************/
1092
1093ODINFUNCTION0(int,OS2WSAUnhookBlockingHook)
1094{
1095 return WSAUnhookBlockingHook();
1096}
1097
1098
1099/*****************************************************************************
1100 * Name :
1101 * Purpose :
1102 * Parameters:
1103 * Variables :
1104 * Result :
1105 * Remark :
1106 * Status : UNTESTED STUB
1107 *
1108 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1109 *****************************************************************************/
1110
1111ODINFUNCTION1(PFN,OS2WSASetBlockingHook,
1112 PFN,lpBlockFunc)
1113{
1114 return(WSASetBlockingHook(lpBlockFunc));
1115}
1116
1117
1118/*****************************************************************************
1119 * Name :
1120 * Purpose :
1121 * Parameters:
1122 * Variables :
1123 * Result :
1124 * Remark :
1125 * Status : UNTESTED STUB
1126 *
1127 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1128 *****************************************************************************/
1129
1130ODINFUNCTION0(int,OS2WSACancelBlockingCall)
1131{
1132 return(WSACancelBlockingCall());
1133}
1134
1135
1136/*****************************************************************************
1137 * Name :
1138 * Purpose :
1139 * Parameters:
1140 * Variables :
1141 * Result :
1142 * Remark :
1143 * Status : UNTESTED STUB
1144 *
1145 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1146 *****************************************************************************/
1147
1148ODINFUNCTION6(LHANDLE,OS2WSAAsyncGetServByName,
1149 HWND,hWnd,
1150 u_int,wMsg,
1151 const char *,name,
1152 const char *,proto,
1153 char *,buf,
1154 int,buflen)
1155{
1156 return(WSAAsyncGetServByName(hWnd,
1157 wMsg,
1158 name,
1159 proto,
1160 buf,
1161 buflen));
1162}
1163
1164
1165/*****************************************************************************
1166 * Name :
1167 * Purpose :
1168 * Parameters:
1169 * Variables :
1170 * Result :
1171 * Remark :
1172 * Status : UNTESTED STUB
1173 *
1174 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1175 *****************************************************************************/
1176
1177ODINFUNCTION6(LHANDLE,OS2WSAAsyncGetServByPort,
1178 HWND,hWnd,
1179 u_int,wMsg,
1180 int,port,
1181 const char *,proto,
1182 char *,buf,
1183 int,buflen)
1184{
1185 return(WSAAsyncGetServByPort(hWnd,
1186 wMsg,
1187 port,
1188 proto,
1189 buf,
1190 buflen));
1191}
1192
1193
1194/*****************************************************************************
1195 * Name :
1196 * Purpose :
1197 * Parameters:
1198 * Variables :
1199 * Result :
1200 * Remark :
1201 * Status : UNTESTED STUB
1202 *
1203 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1204 *****************************************************************************/
1205
1206ODINFUNCTION5(LHANDLE,OS2WSAAsyncGetProtoByName,
1207 HWND,hWnd,
1208 u_int,wMsg,
1209 const char *,name,
1210 char *,buf,
1211 int,buflen)
1212{
1213 return(WSAAsyncGetProtoByName(hWnd,
1214 wMsg,
1215 name,
1216 buf,
1217 buflen));
1218}
1219
1220
1221/*****************************************************************************
1222 * Name :
1223 * Purpose :
1224 * Parameters:
1225 * Variables :
1226 * Result :
1227 * Remark :
1228 * Status : UNTESTED STUB
1229 *
1230 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1231 *****************************************************************************/
1232
1233ODINFUNCTION5(LHANDLE,OS2WSAAsyncGetProtoByNumber,
1234 HWND,hWnd,
1235 u_int,wMsg,
1236 int,number,
1237 char *,buf,
1238 int,buflen)
1239{
1240 return(WSAAsyncGetProtoByNumber(hWnd,
1241 wMsg,
1242 number,
1243 buf,
1244 buflen));
1245}
1246
1247
1248/*****************************************************************************
1249 * Name :
1250 * Purpose :
1251 * Parameters:
1252 * Variables :
1253 * Result :
1254 * Remark :
1255 * Status : UNTESTED STUB
1256 *
1257 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1258 *****************************************************************************/
1259
1260ODINFUNCTION5(LHANDLE,OS2WSAAsyncGetHostByName,
1261 HWND,hWnd,
1262 u_int,wMsg,
1263 const char *,name,
1264 char *,buf,
1265 int,buflen)
1266{
1267 return(WSAAsyncGetHostByName(hWnd,
1268 wMsg,
1269 name,
1270 buf,
1271 buflen));
1272}
1273
1274
1275/*****************************************************************************
1276 * Name :
1277 * Purpose :
1278 * Parameters:
1279 * Variables :
1280 * Result :
1281 * Remark :
1282 * Status : UNTESTED STUB
1283 *
1284 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1285 *****************************************************************************/
1286
1287ODINFUNCTION7(LHANDLE,OS2WSAAsyncGetHostByAddr,
1288 HWND,hWnd,
1289 u_int,wMsg,
1290 const char *,addr,
1291 int,len,
1292 int,type,
1293 char *,buf,
1294 int,buflen)
1295{
1296 return(WSAAsyncGetHostByAddr(hWnd,
1297 wMsg,
1298 addr,
1299 len,
1300 type,
1301 buf,
1302 buflen));
1303}
1304
1305
1306/*****************************************************************************
1307 * Name :
1308 * Purpose :
1309 * Parameters:
1310 * Variables :
1311 * Result :
1312 * Remark :
1313 * Status : UNTESTED STUB
1314 *
1315 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1316 *****************************************************************************/
1317
1318ODINFUNCTION1(int,OS2WSACancelAsyncRequest,
1319 LHANDLE,hAsyncTaskHandle)
1320{
1321 return(WSACancelAsyncRequest(hAsyncTaskHandle));
1322}
1323
1324
1325/*****************************************************************************
1326 * Name :
1327 * Purpose :
1328 * Parameters:
1329 * Variables :
1330 * Result :
1331 * Remark :
1332 * Status : UNTESTED STUB
1333 *
1334 * Author : Patrick Haller [Thu, 1999/11/25 23:00]
1335 *****************************************************************************/
1336
1337ODINFUNCTION4(int,OS2WSAAsyncSelect,
1338 SOCKET,s,
1339 HWND,hWnd,
1340 u_int,wMsg,
1341 long,lEvent)
1342{
1343 int rc;
1344 int iError;
1345 HWND hwndOS2;
1346
1347 /* @@@PH: our source window doesn't seem to have an anchor block.
1348 Docs suggest we've missed to call WinInitialize on the
1349 caller thread.
1350
1351 Cause however is the Open32 handle is (of course!) invalid
1352 in plain PM Window Manager! -> use DAPWSOCK
1353
1354 Unfortunately, DAPWSOCK calls WinQueryAnchorBlock(hOpen32), too.
1355 So, we're stuck until I resolve hWnd to it's valid PM
1356 counterpart.
1357 */
1358
1359 hwndOS2 = Win32ToOS2Handle(hWnd);
1360
1361 rc = WSAAsyncSelect(s,
1362 hwndOS2,
1363 wMsg,
1364 lEvent);
1365
1366 iError = WSAGetLastError();
1367 dprintf(("res=%d, err=%d\n",
1368 rc,
1369 iError));
1370 return (rc);
1371}
Note: See TracBrowser for help on using the repository browser.