Changeset 2013 for trunk/src/wsock32/wsock32.cpp
- Timestamp:
- Dec 7, 1999, 9:27:01 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wsock32/wsock32.cpp
r1807 r2013 1 /* $Id: wsock32.cpp,v 1.1 5 1999-11-22 08:18:02 phallerExp $ */1 /* $Id: wsock32.cpp,v 1.16 1999-12-07 20:25:48 achimha Exp $ */ 2 2 3 3 /* … … 7 7 * Win32 SOCK32 for OS/2 8 8 * 9 * 1998/08/25 Vince Vielhaber 10 * 11 * @(#) wsock32.c 1.0.0 1998/08/25 VV initial release 12 * 1.0.1 1999/04/27 VV cleanup and implement select. 9 * Copyright (C) 1999 Patrick Haller <phaller@gmx.net> 13 10 * 14 11 */ 15 12 16 13 /* Remark: 17 * PH 1999/11/10 memory leak as WSOCKTHREADDATA is NOT yet 18 * freed when thread dies! 19 * PH 1999/11/10 asyncSelect() still left to proper implementation 14 * 1999/11/21 experimental rewrite using IBM's PMWSock only 15 * -> some structural differences remain! (hostent) 16 * 1999/12/01 experimental rewrite works (TELNET) 17 * -> open issue: WSASetLastError / WSAGetLastError 18 * call SetLastError / GetLastError according to docs 19 * 20 * identical structures: 21 * - sockaddr_in 22 * - WSADATA 23 * - sockaddr 24 * - fd_set 25 * - timeval 26 * 27 * incompatible structures: 28 * - hostent 29 * - netent 30 * - servent 31 * - protent 32 * - linger 20 33 */ 21 34 … … 25 38 *****************************************************************************/ 26 39 27 28 #define INCL_DOSPROCESS /* Process and thread values */ 29 #define INCL_DOSFILEMGR /* for DosRead and DosWrite */ 30 #define INCL_DOSQUEUES /* for unnamed pipes */ 31 #define INCL_DOSERRORS /* DOS error values */ 32 #define INCL_WINMESSAGEMGR /* Window Message Functions */ 33 #define INCL_WINMENUS /* Window Menu Functions */ 34 35 /* this is for IBM TCP/IP 5.0 headers as present in the current Warp 4 toolkit */ 36 #define TCPV40HDRS 1 37 38 #define VV_BSD_SELECT /* undefine this if it interferes with other routines */ 39 40 #ifdef VV_BSD_SELECT 41 # define BSD_SELECT 42 #endif 43 44 #include <os2wrap.h> //Odin32 OS/2 api wrappers 45 #include <stdio.h> 46 #include <stdlib.h> 47 #include <stddef.h> 48 #include <string.h> 49 #include <ctype.h> 50 #include <types.h> 40 #include <pmwsock.h> 41 #include <odin.h> 51 42 #include <odinwrap.h> 52 #include <netdb.h> 53 #include <sys/socket.h> 54 #include <sys/ioctl.h> 55 #include <netinet/in.h> 56 57 #ifdef VV_BSD_SELECT 58 # include <sys/select.h> 59 #endif 60 61 #include <sys/time.h> 62 #include <win32type.h> 43 #include <os2sel.h> 44 #include <misc.h> 63 45 #include <wprocess.h> 64 46 #include <heapstring.h> 65 66 #include "wsock32const.h" 47 #include <win32wnd.h> 48 49 67 50 #include "wsock32.h" 68 #include " misc.h"51 #include "relaywin.h" 69 52 70 53 … … 73 56 74 57 /***************************************************************************** 75 * Defines * 76 *****************************************************************************/ 77 78 79 #ifdef FD_CLR 80 #undef FD_CLR 81 #define FD_CLR(x,y) WFD_CLR(x,y) 82 #undef FD_SET 83 #define FD_SET(x,y) WFD_SET(x,y) 84 #undef FD_ZERO 85 #define FD_ZERO(x) WFD_ZERO(x) 86 #undef FD_ISSET 87 #define FD_ISSET(x,y) WFD_SET(x,y) 88 #endif 89 90 #ifndef ERROR_SUCCESS 58 * Local variables * 59 *****************************************************************************/ 60 91 61 #define ERROR_SUCCESS 0 92 #endif 93 94 95 96 /***************************************************************************** 97 * Structures * 98 *****************************************************************************/ 99 100 typedef struct sockaddr* PSOCKADDR; 101 102 //typedef struct _TRANSMIT_FILE_BUFFERS { 103 // PVOID Head; 104 // DWORD HeadLength; 105 // PVOID Tail; 106 // DWORD TailLength; 107 //} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS; 108 // 109 //BOOL, OS2TransmitFile, //, IN, SOCKET, hSocket, //, IN, HANDLE, hFile, //, IN, DWORD, nNumberOfBytesToWrite, //, IN DWORD nNumberOfBytesPerSend, 110 // IN LPOVERLAPPED lpOverlapped, 111 // IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, 112 // IN DWORD dwReserved) 113 //{ 114 // return FALSE; 115 //} 62 63 64 static WSOCKTHREADDATA wstdFallthru; // for emergency only 65 66 static HWND hwndRelay = NULL; // handle to our relay window 116 67 117 68 … … 120 71 *****************************************************************************/ 121 72 122 123 /***************************************************************************** 124 * Local variables * 125 *****************************************************************************/ 126 127 static WSOCKTHREADDATA wstdFallthru; // for emergency only 73 void __stdcall SetLastError(DWORD dwError); 128 74 129 75 … … 166 112 167 113 168 /***************************************************************************** 169 * Name : 170 * Purpose : 171 * Parameters: 172 * Variables : 173 * Result : 174 * Remark : 175 * Status : UNTESTED STUB 176 * 177 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 114 #if 0 115 /***************************************************************************** 116 * Name : 117 * Purpose : 118 * Parameters: 119 * Variables : 120 * Result : 121 * Remark : 122 * Status : UNTESTED STUB 123 * 124 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 178 125 *****************************************************************************/ 179 126 … … 239 186 } 240 187 241 242 /*****************************************************************************243 * Name :244 * Purpose :245 * Parameters:246 * Variables :247 * Result :248 * Remark :249 * Status : UNTESTED STUB250 *251 * Author : Patrick Haller [Tue, 1998/06/16 23:00]252 *****************************************************************************/253 254 ODINFUNCTION2(int, OS2__WSAFDIsSet, SOCKET, fd,255 Wfd_set FAR*, set)256 {257 int i = set->fd_count;258 259 while (i--)260 if (set->fd_array[i] == fd)261 return 1;262 263 return 0;264 }265 266 267 /*****************************************************************************268 * Name :269 * Purpose :270 * Parameters:271 * Variables :272 * Result :273 * Remark :274 * Status : UNTESTED STUB275 *276 * Author : Patrick Haller [Tue, 1998/06/16 23:00]277 *****************************************************************************/278 279 ODINFUNCTION3(SOCKET,OS2accept,SOCKET, s,280 PSOCKADDR, addr,281 int*, addrlen)282 {283 SOCKET rc = accept(s,addr,addrlen);284 285 if (rc == INVALID_SOCKET)286 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));287 else288 WSASetLastError(ERROR_SUCCESS);289 290 return rc;291 }292 293 294 /*****************************************************************************295 * Name :296 * Purpose :297 * Parameters:298 * Variables :299 * Result :300 * Remark :301 * Status : UNTESTED STUB302 *303 * Author : Patrick Haller [Tue, 1998/06/16 23:00]304 *****************************************************************************/305 306 ODINFUNCTION3(int,OS2bind,SOCKET, s,307 const struct sockaddr *, addr,308 int, namelen)309 {310 int rc = bind(s,(PSOCKADDR)addr,namelen);311 312 if (rc < 0)313 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));314 else315 WSASetLastError(ERROR_SUCCESS);316 return rc;317 }318 319 320 /*****************************************************************************321 * Name :322 * Purpose :323 * Parameters:324 * Variables :325 * Result :326 * Remark :327 * Status : UNTESTED STUB328 *329 * Author : Patrick Haller [Tue, 1998/06/16 23:00]330 *****************************************************************************/331 332 ODINFUNCTION1(int,OS2closesocket,SOCKET,s)333 {334 int rc = soclose((int)s);335 336 if (rc < 0)337 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));338 else339 WSASetLastError(ERROR_SUCCESS);340 341 return rc;342 }343 344 345 /*****************************************************************************346 * Name :347 * Purpose :348 * Parameters:349 * Variables :350 * Result :351 * Remark :352 * Status : UNTESTED STUB353 *354 * Author : Patrick Haller [Tue, 1998/06/16 23:00]355 *****************************************************************************/356 357 ODINFUNCTION3(int,OS2connect,SOCKET, s,358 const struct sockaddr*, name,359 int, namelen)360 {361 int rc = connect(s,362 (PSOCKADDR)name,363 namelen);364 365 if (rc < 0)366 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));367 else368 WSASetLastError(ERROR_SUCCESS);369 370 return rc;371 }372 373 374 /*****************************************************************************375 * Name :376 * Purpose :377 * Parameters:378 * Variables :379 * Result :380 * Remark :381 * Status : UNTESTED STUB382 *383 * Author : Patrick Haller [Tue, 1998/06/16 23:00]384 *****************************************************************************/385 386 ODINFUNCTION3(int,OS2ioctlsocket,SOCKET, s,387 long, cmd,388 u_long*, argp)389 {390 int rc = ioctl(s, cmd, (char *)argp, 4);391 392 if (rc < 0)393 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));394 else395 WSASetLastError(ERROR_SUCCESS);396 397 return rc;398 }399 400 401 /*****************************************************************************402 * Name :403 * Purpose :404 * Parameters:405 * Variables :406 * Result :407 * Remark :408 * Status : UNTESTED STUB409 *410 * Author : Patrick Haller [Tue, 1998/06/16 23:00]411 *****************************************************************************/412 413 ODINFUNCTION3(int,OS2getpeername,SOCKET, s,414 PSOCKADDR,name,415 int*, namelen)416 {417 SOCKET rc = getpeername(s,name,namelen);418 419 if (rc == SOCKET_ERROR)420 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));421 else422 WSASetLastError(ERROR_SUCCESS);423 424 return rc;425 }426 427 428 /*****************************************************************************429 * Name :430 * Purpose :431 * Parameters:432 * Variables :433 * Result :434 * Remark :435 * Status : UNTESTED STUB436 *437 * Author : Patrick Haller [Tue, 1998/06/16 23:00]438 *****************************************************************************/439 440 ODINFUNCTION3(int,OS2getsockname,SOCKET, s,441 PSOCKADDR,name,442 int*, namelen)443 {444 SOCKET rc = getsockname(s,name,namelen);445 446 if (rc == SOCKET_ERROR)447 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));448 else449 WSASetLastError(ERROR_SUCCESS);450 451 return rc;452 }453 454 455 /*****************************************************************************456 * Name :457 * Purpose :458 * Parameters:459 * Variables :460 * Result :461 * Remark :462 * Status : UNTESTED STUB463 *464 * Author : Patrick Haller [Tue, 1998/06/16 23:00]465 *****************************************************************************/466 467 ODINFUNCTION5(int,OS2getsockopt,SOCKET,s,468 int, level,469 int, optname,470 char*, optval,471 int*, optlen)472 {473 int rc = getsockopt(s,level,optname,optval,optlen);474 475 if (rc == SOCKET_ERROR)476 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));477 else478 WSASetLastError(ERROR_SUCCESS);479 480 return rc;481 }482 483 484 /*****************************************************************************485 * Name :486 * Purpose :487 * Parameters:488 * Variables :489 * Result :490 * Remark :491 * Status : UNTESTED STUB492 *493 * Author : Patrick Haller [Tue, 1998/06/16 23:00]494 *****************************************************************************/495 496 ODINFUNCTION1(u_long,OS2htonl,u_long,hostlong)497 {498 return htonl(hostlong);499 }500 501 502 /*****************************************************************************503 * Name :504 * Purpose :505 * Parameters:506 * Variables :507 * Result :508 * Remark :509 * Status : UNTESTED STUB510 *511 * Author : Patrick Haller [Tue, 1998/06/16 23:00]512 *****************************************************************************/513 514 ODINFUNCTION1(u_short,OS2htons,u_short,hostshort)515 {516 return htons(hostshort);517 }518 519 520 /*****************************************************************************521 * Name :522 * Purpose :523 * Parameters:524 * Variables :525 * Result :526 * Remark :527 * Status : UNTESTED STUB528 *529 * Author : Patrick Haller [Tue, 1998/06/16 23:00]530 *****************************************************************************/531 532 ODINFUNCTION1(u_long,OS2inet_addr,const char*, cp)533 {534 return inet_addr((char *)cp);535 }536 537 538 /*****************************************************************************539 * Name :540 * Purpose :541 * Parameters:542 * Variables :543 * Result :544 * Remark :545 * Status : UNTESTED STUB546 *547 * Author : Patrick Haller [Tue, 1998/06/16 23:00]548 *****************************************************************************/549 550 ODINFUNCTION1(char*,OS2inet_ntoa,struct in_addr,in)551 {552 return inet_ntoa(in);553 }554 555 556 /*****************************************************************************557 * Name :558 * Purpose :559 * Parameters:560 * Variables :561 * Result :562 * Remark :563 * Status : UNTESTED STUB564 *565 * Author : Patrick Haller [Tue, 1998/06/16 23:00]566 *****************************************************************************/567 568 ODINFUNCTION2(int,OS2listen,SOCKET,s,569 int, backlog)570 {571 int rc = listen(s,backlog);572 573 if (rc < 0)574 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));575 else576 WSASetLastError(ERROR_SUCCESS);577 578 return rc;579 }580 581 582 /*****************************************************************************583 * Name :584 * Purpose :585 * Parameters:586 * Variables :587 * Result :588 * Remark :589 * Status : UNTESTED STUB590 *591 * Author : Patrick Haller [Tue, 1998/06/16 23:00]592 *****************************************************************************/593 594 ODINFUNCTION1(u_long,OS2ntohl,u_long,netlong)595 {596 return ntohl(netlong);597 }598 599 600 /*****************************************************************************601 * Name :602 * Purpose :603 * Parameters:604 * Variables :605 * Result :606 * Remark :607 * Status : UNTESTED STUB608 *609 * Author : Patrick Haller [Tue, 1998/06/16 23:00]610 *****************************************************************************/611 612 ODINFUNCTION1(u_short,OS2ntohs,u_short,netshort)613 {614 return ntohs(netshort);615 }616 617 618 /*****************************************************************************619 * Name :620 * Purpose :621 * Parameters:622 * Variables :623 * Result :624 * Remark :625 * Status : UNTESTED STUB626 *627 * Author : Patrick Haller [Tue, 1998/06/16 23:00]628 *****************************************************************************/629 630 ODINFUNCTION4(int,OS2recv,SOCKET,s,631 char*, buf,632 int, len,633 int, flags)634 {635 int rc = recv(s,buf,len,flags);636 637 if (rc < 0)638 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));639 else640 WSASetLastError(ERROR_SUCCESS);641 642 return rc;643 }644 645 646 /*****************************************************************************647 * Name :648 * Purpose :649 * Parameters:650 * Variables :651 * Result :652 * Remark :653 * Status : UNTESTED STUB654 *655 * Author : Patrick Haller [Tue, 1998/06/16 23:00]656 *****************************************************************************/657 658 ODINFUNCTION6(int,OS2recvfrom,SOCKET, s,659 char*, buf,660 int, len,661 int, flags,662 PSOCKADDR, from,663 int*, fromlen)664 {665 int rc = recvfrom(s,buf,len,flags,from,fromlen);666 667 if (rc < 0)668 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));669 else670 WSASetLastError(ERROR_SUCCESS);671 672 return rc;673 }674 675 676 /*****************************************************************************677 * Name :678 * Purpose :679 * Parameters:680 * Variables :681 * Result :682 * Remark :683 * Status : UNTESTED STUB684 *685 * Author : Patrick Haller [Tue, 1998/06/16 23:00]686 *****************************************************************************/687 688 #ifdef VV_BSD_SELECT689 690 ODINFUNCTION5(int,OS2select,int, nfds,691 Wfd_set*, readfds,692 Wfd_set*, writefds,693 Wfd_set*, exceptfds,694 const struct Wtimeval*, timeout)695 {696 int rc = select(nfds,697 (fd_set *)readfds,698 (fd_set *)writefds,699 (fd_set *)exceptfds,700 (timeval *)timeout);701 702 if (rc == SOCKET_ERROR)703 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));704 else705 WSASetLastError(ERROR_SUCCESS);706 707 return rc;708 }709 710 #else711 # error OS/2-style select not implemented!712 188 #endif 713 189 714 190 715 /***************************************************************************** 716 * Name : 717 * Purpose : 718 * Parameters: 719 * Variables : 720 * Result : 721 * Remark : 722 * Status : UNTESTED STUB 723 * 724 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 725 *****************************************************************************/ 726 727 ODINFUNCTION4(int,OS2send,SOCKET, s, 728 const char*, buf, 729 int, len, 730 int, flags) 731 { 732 int rc = send(s,(char *)buf,len,flags); 733 734 if (rc < 0) 735 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 736 else 737 WSASetLastError(ERROR_SUCCESS); 738 739 return rc; 740 } 741 742 743 /***************************************************************************** 744 * Name : 745 * Purpose : 746 * Parameters: 747 * Variables : 748 * Result : 749 * Remark : 750 * Status : UNTESTED STUB 751 * 752 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 753 *****************************************************************************/ 754 755 ODINFUNCTION6(int,OS2sendto,SOCKET, s, 756 const char*, buf, 757 int, len, 758 int, flags, 759 const struct sockaddr*, to, 760 int, tolen) 761 { 762 int rc = sendto(s,(char *)buf,len,flags,(PSOCKADDR)to,tolen); 763 764 if (rc < 0) 765 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 766 else 767 WSASetLastError(ERROR_SUCCESS); 768 769 return rc; 770 } 771 772 773 /***************************************************************************** 774 * Name : 775 * Purpose : 776 * Parameters: 777 * Variables : 778 * Result : 779 * Remark : 780 * Status : UNTESTED STUB 781 * 782 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 783 *****************************************************************************/ 784 785 ODINFUNCTION5(int,OS2setsockopt,SOCKET, s, 786 int, level, 787 int, optname, 788 const char*, optval, 789 int, optlen) 191 192 193 194 195 196 /***************************************************************************** 197 * Name : 198 * Purpose : 199 * Parameters: 200 * Variables : 201 * Result : 202 * Remark : 203 * Status : UNTESTED STUB 204 * 205 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 206 *****************************************************************************/ 207 208 209 ODINPROCEDURE1(OS2WSASetLastError, 210 int,iError) 211 { 212 // according to the docs, WSASetLastError() is just a call-through 213 // to SetLastError() 214 WSASetLastError(iError); 215 SetLastError(iError); 216 } 217 218 219 /***************************************************************************** 220 * Name : 221 * Purpose : 222 * Parameters: 223 * Variables : 224 * Result : 225 * Remark : 226 * Status : UNTESTED STUB 227 * 228 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 229 *****************************************************************************/ 230 231 ODINFUNCTION0(int,OS2WSAGetLastError) 232 { 233 // according to the docs, WSASetLastError() is just a call-through 234 // to SetLastError(). However, what can be implemented here? 235 return WSAGetLastError(); 236 } 237 238 239 /***************************************************************************** 240 * Name : 241 * Purpose : 242 * Parameters: 243 * Variables : 244 * Result : 245 * Remark : 246 * Status : UNTESTED STUB 247 * 248 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 249 *****************************************************************************/ 250 251 ODINFUNCTION2(int,OS2__WSAFDIsSet,SOCKET, s, 252 fd_set*,fds) 253 { 254 return (__WSAFDIsSet(s,fds)); 255 } 256 257 258 /***************************************************************************** 259 * Name : 260 * Purpose : 261 * Parameters: 262 * Variables : 263 * Result : 264 * Remark : 265 * Status : UNTESTED STUB 266 * 267 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 268 *****************************************************************************/ 269 270 ODINFUNCTION3(SOCKET,OS2accept, SOCKET, s, 271 struct sockaddr *,addr, 272 int *, addrlen) 273 { 274 return(accept(s,addr,addrlen)); 275 } 276 277 278 /***************************************************************************** 279 * Name : 280 * Purpose : 281 * Parameters: 282 * Variables : 283 * Result : 284 * Remark : 285 * Status : UNTESTED STUB 286 * 287 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 288 *****************************************************************************/ 289 290 ODINFUNCTION3(int,OS2bind, 291 SOCKET ,s, 292 const struct sockaddr *,addr, 293 int, namelen) 294 { 295 return(bind(s,addr,namelen)); 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 311 ODINFUNCTION1(int,OS2closesocket,SOCKET, s) 312 { 313 return(closesocket(s)); 314 } 315 316 317 /***************************************************************************** 318 * Name : 319 * Purpose : 320 * Parameters: 321 * Variables : 322 * Result : 323 * Remark : 324 * Status : UNTESTED STUB 325 * 326 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 327 *****************************************************************************/ 328 329 ODINFUNCTION3(int,OS2connect, 330 SOCKET, s, 331 const struct sockaddr *,name, 332 int, namelen) 333 { 334 return(connect(s,name,namelen)); 335 } 336 337 338 /***************************************************************************** 339 * Name : 340 * Purpose : 341 * Parameters: 342 * Variables : 343 * Result : 344 * Remark : 345 * Status : UNTESTED STUB 346 * 347 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 348 *****************************************************************************/ 349 350 ODINFUNCTION3(int,OS2ioctlsocket, 351 SOCKET,s, 352 long, cmd, 353 u_long *,argp) 354 { 355 return(ioctlsocket(s,cmd,argp)); 356 } 357 358 359 /***************************************************************************** 360 * Name : 361 * Purpose : 362 * Parameters: 363 * Variables : 364 * Result : 365 * Remark : 366 * Status : UNTESTED STUB 367 * 368 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 369 *****************************************************************************/ 370 371 ODINFUNCTION3(int,OS2getpeername, 372 SOCKET, s, 373 struct sockaddr *,name, 374 int *, namelen) 375 { 376 return(getpeername(s,name,namelen)); 377 } 378 379 380 /***************************************************************************** 381 * Name : 382 * Purpose : 383 * Parameters: 384 * Variables : 385 * Result : 386 * Remark : 387 * Status : UNTESTED STUB 388 * 389 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 390 *****************************************************************************/ 391 392 ODINFUNCTION3(int,OS2getsockname, 393 SOCKET,s, 394 struct sockaddr *,name, 395 int *, namelen) 396 { 397 return(getsockname(s,name,namelen)); 398 } 399 400 401 /***************************************************************************** 402 * Name : 403 * Purpose : 404 * Parameters: 405 * Variables : 406 * Result : 407 * Remark : 408 * Status : UNTESTED STUB 409 * 410 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 411 *****************************************************************************/ 412 413 ODINFUNCTION5(int,OS2getsockopt, 414 SOCKET, s, 415 int, level, 416 int, optname, 417 char *, optval, 418 int *,optlen) 419 { 420 return(getsockopt(s, 421 level, 422 optname, 423 optval, 424 optlen)); 425 } 426 427 428 /***************************************************************************** 429 * Name : 430 * Purpose : 431 * Parameters: 432 * Variables : 433 * Result : 434 * Remark : 435 * Status : UNTESTED STUB 436 * 437 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 438 *****************************************************************************/ 439 440 ODINFUNCTION1(u_long,OS2htonl, 441 u_long,hostlong) 442 { 443 return(htonl(hostlong)); 444 } 445 446 447 /***************************************************************************** 448 * Name : 449 * Purpose : 450 * Parameters: 451 * Variables : 452 * Result : 453 * Remark : 454 * Status : UNTESTED STUB 455 * 456 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 457 *****************************************************************************/ 458 459 ODINFUNCTION1(u_short,OS2htons, 460 u_short,hostshort) 461 { 462 return(htons(hostshort)); 463 } 464 465 466 /***************************************************************************** 467 * Name : 468 * Purpose : 469 * Parameters: 470 * Variables : 471 * Result : 472 * Remark : 473 * Status : UNTESTED STUB 474 * 475 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 476 *****************************************************************************/ 477 478 ODINFUNCTION1(unsigned long,OS2inet_addr, 479 const char *, cp) 480 { 481 dprintf(("WSOCK32: OS2inet_addr(%s)\n", 482 cp)); 483 484 return (inet_addr(cp)); 485 } 486 487 488 /***************************************************************************** 489 * Name : 490 * Purpose : 491 * Parameters: 492 * Variables : 493 * Result : 494 * Remark : 495 * Status : UNTESTED STUB 496 * 497 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 498 *****************************************************************************/ 499 500 ODINFUNCTION1(char *,OS2inet_ntoa, 501 struct in_addr, in) 502 { 503 return(inet_ntoa(in)); 504 } 505 506 507 /***************************************************************************** 508 * Name : 509 * Purpose : 510 * Parameters: 511 * Variables : 512 * Result : 513 * Remark : 514 * Status : UNTESTED STUB 515 * 516 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 517 *****************************************************************************/ 518 519 ODINFUNCTION2(int,OS2listen, 520 SOCKET, s, 521 int, backlog) 522 { 523 return(listen(s,backlog)); 524 } 525 526 527 /***************************************************************************** 528 * Name : 529 * Purpose : 530 * Parameters: 531 * Variables : 532 * Result : 533 * Remark : 534 * Status : UNTESTED STUB 535 * 536 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 537 *****************************************************************************/ 538 539 ODINFUNCTION1(u_long,OS2ntohl, 540 u_long,netlong) 541 { 542 return(ntohl(netlong)); 543 } 544 545 546 /***************************************************************************** 547 * Name : 548 * Purpose : 549 * Parameters: 550 * Variables : 551 * Result : 552 * Remark : 553 * Status : UNTESTED STUB 554 * 555 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 556 *****************************************************************************/ 557 558 ODINFUNCTION1(u_short,OS2ntohs, 559 u_short,netshort) 560 { 561 return(ntohs(netshort)); 562 } 563 564 565 /***************************************************************************** 566 * Name : 567 * Purpose : 568 * Parameters: 569 * Variables : 570 * Result : 571 * Remark : 572 * Status : UNTESTED STUB 573 * 574 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 575 *****************************************************************************/ 576 577 ODINFUNCTION4(int,OS2recv, 578 SOCKET,s, 579 char *,buf, 580 int,len, 581 int,flags) 582 { 583 return(recv(s, 584 buf, 585 len, 586 flags)); 587 } 588 589 590 /***************************************************************************** 591 * Name : 592 * Purpose : 593 * Parameters: 594 * Variables : 595 * Result : 596 * Remark : 597 * Status : UNTESTED STUB 598 * 599 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 600 *****************************************************************************/ 601 602 ODINFUNCTION6(int,OS2recvfrom, 603 SOCKET,s, 604 char *,buf, 605 int,len, 606 int,flags, 607 struct sockaddr *,from, 608 int *,fromlen) 609 { 610 611 return(recvfrom(s, 612 buf, 613 len, 614 flags, 615 from, 616 fromlen)); 617 } 618 619 620 /***************************************************************************** 621 * Name : 622 * Purpose : 623 * Parameters: 624 * Variables : 625 * Result : 626 * Remark : 627 * Status : UNTESTED STUB 628 * 629 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 630 *****************************************************************************/ 631 632 ODINFUNCTION5(int,OS2select, 633 int,nfds, 634 fd_set *,readfds, 635 fd_set *,writefds, 636 fd_set *,exceptfds, 637 const struct timeval *,timeout) 638 { 639 return(select(nfds, 640 readfds, 641 writefds, 642 exceptfds, 643 timeout)); 644 } 645 646 647 /***************************************************************************** 648 * Name : 649 * Purpose : 650 * Parameters: 651 * Variables : 652 * Result : 653 * Remark : 654 * Status : UNTESTED STUB 655 * 656 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 657 *****************************************************************************/ 658 659 ODINFUNCTION4(int,OS2send, 660 SOCKET,s, 661 const char *,buf, 662 int,len, 663 int,flags) 664 { 665 return(send(s, 666 buf, 667 len, 668 flags)); 669 } 670 671 672 /***************************************************************************** 673 * Name : 674 * Purpose : 675 * Parameters: 676 * Variables : 677 * Result : 678 * Remark : 679 * Status : UNTESTED STUB 680 * 681 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 682 *****************************************************************************/ 683 684 ODINFUNCTION6(int,OS2sendto, 685 SOCKET,s, 686 const char *,buf, 687 int,len, 688 int,flags, 689 const struct sockaddr *,to, 690 int,tolen) 691 { 692 return(sendto(s, 693 buf, 694 len, 695 flags, 696 to, 697 tolen)); 698 } 699 700 701 /***************************************************************************** 702 * Name : 703 * Purpose : 704 * Parameters: 705 * Variables : 706 * Result : 707 * Remark : 708 * Status : UNTESTED STUB 709 * 710 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 711 *****************************************************************************/ 712 713 ODINFUNCTION5(int,OS2setsockopt, 714 SOCKET,s, 715 int,level, 716 int,optname, 717 const char *,optval, 718 int,optlen) 790 719 { 791 720 struct Wlinger *yy; … … 806 735 807 736 if (rc == SOCKET_ERROR) 808 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 737 //OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 738 OS2WSASetLastError(WSAEINVAL); 809 739 else 810 WSASetLastError(ERROR_SUCCESS);740 OS2WSASetLastError(ERROR_SUCCESS); 811 741 812 742 return rc; … … 823 753 * Status : UNTESTED STUB 824 754 * 825 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 826 *****************************************************************************/ 827 828 ODINFUNCTION2(int,OS2shutdown,SOCKET,s, 829 int, how) 830 { 831 int rc = shutdown(s,how); 832 833 if (rc == SOCKET_ERROR) 834 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 835 else 836 WSASetLastError(ERROR_SUCCESS); 837 838 return rc; 839 } 840 841 842 /***************************************************************************** 843 * Name : 844 * Purpose : 845 * Parameters: 846 * Variables : 847 * Result : 848 * Remark : 849 * Status : UNTESTED STUB 850 * 851 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 852 *****************************************************************************/ 853 854 ODINFUNCTION3(SOCKET,OS2socket,int,af, 855 int,type, 856 int,protocol) 857 { 858 SOCKET rc = socket(af,type,protocol); 859 860 if (rc == INVALID_SOCKET) 861 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 862 else 863 WSASetLastError(ERROR_SUCCESS); 864 865 return rc; 866 } 867 868 869 /***************************************************************************** 870 * Name : 871 * Purpose : 872 * Parameters: 873 * Variables : 874 * Result : 875 * Remark : 876 * Status : UNTESTED STUB 877 * 878 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 879 *****************************************************************************/ 880 881 ODINFUNCTION3(WHOSTENT*,OS2gethostbyaddr,const char*, addr, 882 int, len, 883 int, type) 755 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 756 *****************************************************************************/ 757 758 ODINFUNCTION2(int,OS2shutdown, 759 SOCKET,s, 760 int,how) 761 { 762 return(shutdown(s, 763 how)); 764 } 765 766 767 /***************************************************************************** 768 * Name : 769 * Purpose : 770 * Parameters: 771 * Variables : 772 * Result : 773 * Remark : 774 * Status : UNTESTED STUB 775 * 776 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 777 *****************************************************************************/ 778 779 ODINFUNCTION3(SOCKET,OS2socket, 780 int,af, 781 int,type, 782 int,protocol) 783 { 784 return(socket(af, 785 type, 786 protocol)); 787 } 788 789 790 /* Database function prototypes */ 791 792 /***************************************************************************** 793 * Name : 794 * Purpose : 795 * Parameters: 796 * Variables : 797 * Result : 798 * Remark : 799 * Status : UNTESTED STUB 800 * 801 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 802 *****************************************************************************/ 803 804 ODINFUNCTION3(struct Whostent *,OS2gethostbyaddr, 805 const char *,addr, 806 int,len, 807 int,type) 884 808 { 885 809 WHOSTENT *yy; … … 888 812 889 813 xx = gethostbyaddr((char *)addr,len,type); 814 //PH: we assume PMWSOCK sets WSASetLastError correctly! 890 815 891 816 if(xx == NULL) 892 {893 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));894 817 return (WHOSTENT *)NULL; 895 }896 else897 WSASetLastError(ERROR_SUCCESS);898 818 899 819 // access current thread wsock data block … … 919 839 * Status : UNTESTED STUB 920 840 * 921 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 922 *****************************************************************************/ 923 924 ODINFUNCTION1(WHOSTENT*,OS2gethostbyname,const char*,name) 841 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 842 *****************************************************************************/ 843 844 ODINFUNCTION1(struct Whostent *,OS2gethostbyname, 845 const char *,name) 925 846 { 926 847 WHOSTENT *yy; … … 930 851 931 852 xx = gethostbyname((char *)name); 853 //PH: we assume PMWSOCK sets WSASetLastError correctly! 854 932 855 if(xx == NULL) 933 {934 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));935 856 return (WHOSTENT *)NULL; 936 }937 else938 WSASetLastError(ERROR_SUCCESS);939 857 940 858 // access current thread wsock data block … … 960 878 * Status : UNTESTED STUB 961 879 * 962 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 963 *****************************************************************************/ 964 965 ODINFUNCTION2(int,OS2gethostname,char *,name, 966 int, namelen) 967 { 968 int rc = gethostname(name,namelen); 969 970 if (rc == SOCKET_ERROR) 971 WSASetLastError(ERROR_SUCCESS); 972 else 973 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 974 975 return (rc); 976 } 977 978 979 /***************************************************************************** 980 * Name : 981 * Purpose : 982 * Parameters: 983 * Variables : 984 * Result : 985 * Remark : 986 * Status : UNTESTED STUB 987 * 988 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 989 *****************************************************************************/ 990 991 ODINFUNCTION2(WSERVENT*,OS2getservbyport, int, port, 992 const char*, proto) 880 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 881 *****************************************************************************/ 882 883 ODINFUNCTION2(int,OS2gethostname, 884 char *,name, 885 int,namelen) 886 { 887 //PH: we assume PMWSOCK sets WSASetLastError correctly! 888 return(gethostname(name, 889 namelen)); 890 } 891 892 893 /***************************************************************************** 894 * Name : 895 * Purpose : 896 * Parameters: 897 * Variables : 898 * Result : 899 * Remark : 900 * Status : UNTESTED STUB 901 * 902 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 903 *****************************************************************************/ 904 905 ODINFUNCTION2(struct Wservent *,OS2getservbyport, 906 int, port, 907 const char *, proto) 993 908 { 994 909 struct servent *xx; 995 910 PWSOCKTHREADDATA pwstd; 996 911 912 //PH: we assume PMWSOCK sets WSASetLastError correctly! 997 913 xx = getservbyport(port,(char *)proto); 998 914 999 915 if(xx == NULL) 1000 { // this call doesn't generate an error message1001 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));1002 916 return (WSERVENT *)NULL; 1003 }1004 else1005 WSASetLastError(ERROR_SUCCESS);1006 917 1007 918 // access current thread wsock data block … … 1026 937 * Status : UNTESTED STUB 1027 938 * 1028 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1029 *****************************************************************************/ 1030 1031 ODINFUNCTION2(WSERVENT*,OS2getservbyname,const char*,name, 1032 const char*,proto) 939 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 940 *****************************************************************************/ 941 942 ODINFUNCTION2(struct Wservent *,OS2getservbyname, 943 const char *, name, 944 const char *, proto) 1033 945 { 1034 946 WSERVENT *yy; … … 1037 949 1038 950 951 //PH: we assume PMWSOCK sets WSASetLastError correctly! 1039 952 xx = getservbyname((char *)name,(char *)proto); 1040 953 1041 954 if(xx == NULL) 1042 { // this call doesn't generate an error message1043 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));1044 955 return (WSERVENT *)NULL; 1045 }1046 else1047 WSASetLastError(ERROR_SUCCESS);1048 956 1049 957 // access current thread wsock data block … … 1068 976 * Status : UNTESTED STUB 1069 977 * 1070 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1071 *****************************************************************************/ 1072 1073 ODINFUNCTION1(WPROTOENT*,OS2getprotobynumber,int,proto) 978 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 979 *****************************************************************************/ 980 981 ODINFUNCTION1(struct Wprotoent *,OS2getprotobynumber, 982 int,proto) 1074 983 { 1075 984 struct protoent *xx; 1076 985 PWSOCKTHREADDATA pwstd; 1077 986 987 //PH: we assume PMWSOCK sets WSASetLastError correctly! 1078 988 xx = getprotobynumber(proto); 1079 989 1080 990 if(xx == NULL) 1081 {1082 // this call doesn't generate an error message1083 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));1084 991 return (WPROTOENT *)NULL; 1085 }1086 else1087 WSASetLastError(ERROR_SUCCESS);1088 992 1089 993 // access current thread wsock data block … … 1107 1011 * Status : UNTESTED STUB 1108 1012 * 1109 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1110 *****************************************************************************/ 1111 1112 ODINFUNCTION1(WPROTOENT*,OS2getprotobyname,const char*,name) 1013 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1014 *****************************************************************************/ 1015 1016 ODINFUNCTION1(struct Wprotoent *,OS2getprotobyname, 1017 const char *,name) 1113 1018 { 1114 1019 struct protoent *xx; 1115 1020 PWSOCKTHREADDATA pwstd; 1116 1021 1022 //PH: we assume PMWSOCK sets WSASetLastError correctly! 1117 1023 xx = getprotobyname((char *)name); 1118 1024 1119 1025 if(xx == NULL) 1120 { // this call doesn't generate an error message1121 WSASetLastError(iTranslateSockErrToWSock(sock_errno()));1122 1026 return (WPROTOENT *)NULL; 1123 }1124 else1125 WSASetLastError(ERROR_SUCCESS);1126 1027 1127 1028 // access current thread wsock data block … … 1136 1037 1137 1038 1138 /***************************************************************************** 1139 * Name : 1140 * Purpose : 1141 * Parameters: 1142 * Variables : 1143 * Result : 1144 * Remark : 1145 * Status : UNTESTED STUB 1146 * 1147 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1148 *****************************************************************************/ 1149 1150 ODINFUNCTION2(int,OS2WSAStartup,USHORT, wVersionRequired, 1151 LPWSADATA,lpWsaData) 1152 { 1153 APIRET rc; 1154 1155 /* Make sure that the version requested is >= 1.1. */ 1156 /* The low byte is the major version and the high */ 1157 /* byte is the minor version. */ 1158 1159 if ( LOBYTE( wVersionRequired ) < 1 || 1160 ( LOBYTE( wVersionRequired ) == 1 && 1161 HIBYTE( wVersionRequired ) < 1 )) { 1162 return WSAVERNOTSUPPORTED; 1163 } 1164 1165 /* Since we only support 1.1, set both wVersion and */ 1166 /* wHighVersion to 1.1. */ 1167 1168 lpWsaData->wVersion = MAKEWORD( 1, 1 ); 1169 lpWsaData->wHighVersion = MAKEWORD( 1, 1 ); 1170 strcpy(lpWsaData->szDescription,"Win32OS2 WSOCK32.DLL Ver. 1.1"); 1171 lpWsaData->iMaxUdpDg = 32767; 1172 lpWsaData->iMaxSockets = 2048; 1173 strcpy(lpWsaData->szSystemStatus,"No Status"); 1174 1175 if(sock_init() == 0) 1039 1040 /* Microsoft Windows Extension function prototypes */ 1041 1042 /***************************************************************************** 1043 * Name : 1044 * Purpose : 1045 * Parameters: 1046 * Variables : 1047 * Result : 1048 * Remark : 1049 * Status : UNTESTED STUB 1050 * 1051 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1052 *****************************************************************************/ 1053 1054 ODINFUNCTION2(int,OS2WSAStartup, 1055 USHORT,wVersionRequired, 1056 LPWSADATA,lpWSAData) 1057 { 1058 return(WSAStartup(wVersionRequired, 1059 lpWSAData)); 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 1075 ODINFUNCTION0(int,OS2WSACleanup) 1076 { 1077 return(WSACleanup()); 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 1093 ODINFUNCTION0(BOOL,OS2WSAIsBlocking) 1094 { 1095 return WSAIsBlocking(); 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 1111 ODINFUNCTION0(int,OS2WSAUnhookBlockingHook) 1112 { 1113 return WSAUnhookBlockingHook(); 1114 } 1115 1116 1117 /***************************************************************************** 1118 * Name : 1119 * Purpose : 1120 * Parameters: 1121 * Variables : 1122 * Result : 1123 * Remark : 1124 * Status : UNTESTED STUB 1125 * 1126 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1127 *****************************************************************************/ 1128 1129 ODINFUNCTION1(PFN,OS2WSASetBlockingHook, 1130 PFN,lpBlockFunc) 1131 { 1132 return(WSASetBlockingHook(lpBlockFunc)); 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 1148 ODINFUNCTION0(int,OS2WSACancelBlockingCall) 1149 { 1150 return(WSACancelBlockingCall()); 1151 } 1152 1153 1154 /***************************************************************************** 1155 * Name : 1156 * Purpose : 1157 * Parameters: 1158 * Variables : 1159 * Result : 1160 * Remark : 1161 * Status : UNTESTED STUB 1162 * 1163 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1164 *****************************************************************************/ 1165 1166 ODINFUNCTION6(LHANDLE,OS2WSAAsyncGetServByName, 1167 HWND,hWnd, 1168 u_int,wMsg, 1169 const char *,name, 1170 const char *,proto, 1171 char *,buf, 1172 int,buflen) 1173 { 1174 int rc; 1175 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1176 ULONG ulNewID; 1177 1178 if (hwndRelay == NULL) // already initialized ? 1179 hwndRelay = RelayInitialize(hwndOS2); 1180 1181 // add entry to list, we need to store both our temp buffer and the apps buffer 1182 ulNewID = RelayAlloc(hWnd, 1183 wMsg, 1184 ASYNCREQUEST_GETSERVBYNAME, 1185 FALSE, 1186 buf); 1187 1188 // call pmwsock function, will fill our temp buffer 1189 rc = WSAAsyncGetServByName(hwndRelay, 1190 ulNewID, 1191 name, 1192 proto, 1193 buf, 1194 buflen); 1195 1196 // if an error occurs, free the allocated relay entry 1197 if (rc == SOCKET_ERROR) 1198 RelayFree(ulNewID); 1199 1200 return (rc); 1201 } 1202 1203 1204 /***************************************************************************** 1205 * Name : 1206 * Purpose : 1207 * Parameters: 1208 * Variables : 1209 * Result : 1210 * Remark : 1211 * Status : UNTESTED STUB 1212 * 1213 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1214 *****************************************************************************/ 1215 1216 ODINFUNCTION6(LHANDLE,OS2WSAAsyncGetServByPort, 1217 HWND,hWnd, 1218 u_int,wMsg, 1219 int,port, 1220 const char *,proto, 1221 char *,buf, 1222 int,buflen) 1223 { 1224 int rc; 1225 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1226 ULONG ulNewID; 1227 1228 if (hwndRelay == NULL) // already initialized ? 1229 hwndRelay = RelayInitialize(hwndOS2); 1230 1231 // add entry to list, we need to store both our temp buffer and the apps buffer 1232 ulNewID = RelayAlloc(hWnd, 1233 wMsg, 1234 ASYNCREQUEST_GETSERVBYPORT, 1235 FALSE, 1236 buf); 1237 1238 // call pmwsock function, will fill our temp buffer 1239 rc = WSAAsyncGetServByPort(hwndRelay, 1240 ulNewID, 1241 port, 1242 proto, 1243 buf, 1244 buflen); 1245 1246 // if an error occurs, free the allocated relay entry 1247 if (rc == SOCKET_ERROR) 1248 RelayFree(ulNewID); 1249 1250 return rc; 1251 } 1252 1253 1254 /***************************************************************************** 1255 * Name : 1256 * Purpose : 1257 * Parameters: 1258 * Variables : 1259 * Result : 1260 * Remark : 1261 * Status : UNTESTED STUB 1262 * 1263 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1264 *****************************************************************************/ 1265 1266 ODINFUNCTION5(LHANDLE,OS2WSAAsyncGetProtoByName, 1267 HWND,hWnd, 1268 u_int,wMsg, 1269 const char *,name, 1270 char *,buf, 1271 int,buflen) 1272 { 1273 int rc; 1274 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1275 ULONG ulNewID; 1276 1277 if (hwndRelay == NULL) // already initialized ? 1278 hwndRelay = RelayInitialize(hwndOS2); 1279 1280 // add entry to list, we need to store both our temp buffer and the apps buffer 1281 ulNewID = RelayAlloc(hWnd, 1282 wMsg, 1283 ASYNCREQUEST_GETPROTOBYNAME, 1284 FALSE, 1285 buf); 1286 1287 // call pmwsock function, will fill our temp buffer 1288 rc = WSAAsyncGetProtoByName(hwndRelay, 1289 ulNewID, 1290 name, 1291 buf, 1292 buflen); 1293 1294 // if an error occurs, free the allocated relay entry 1295 if (rc == SOCKET_ERROR) 1296 RelayFree(ulNewID); 1297 1298 return (rc); 1299 } 1300 1301 1302 /***************************************************************************** 1303 * Name : 1304 * Purpose : 1305 * Parameters: 1306 * Variables : 1307 * Result : 1308 * Remark : 1309 * Status : UNTESTED STUB 1310 * 1311 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1312 *****************************************************************************/ 1313 1314 ODINFUNCTION5(LHANDLE,OS2WSAAsyncGetProtoByNumber, 1315 HWND,hWnd, 1316 u_int,wMsg, 1317 int,number, 1318 char *,buf, 1319 int,buflen) 1320 { 1321 int rc; 1322 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1323 ULONG ulNewID; 1324 1325 if (hwndRelay == NULL) // already initialized ? 1326 hwndRelay = RelayInitialize(hwndOS2); 1327 1328 // add entry to list, we need to store both our temp buffer and the apps buffer 1329 ulNewID = RelayAlloc(hWnd, 1330 wMsg, 1331 ASYNCREQUEST_GETPROTOBYNUMBER, 1332 FALSE, 1333 buf); 1334 1335 // call pmwsock function, will fill our temp buffer 1336 rc = WSAAsyncGetProtoByNumber(hwndRelay, 1337 ulNewID, 1338 number, 1339 buf, 1340 buflen); 1341 1342 // if an error occurs, free the allocated relay entry 1343 if (rc == SOCKET_ERROR) 1344 RelayFree(ulNewID); 1345 1346 return rc; 1347 } 1348 1349 1350 /***************************************************************************** 1351 * Name : 1352 * Purpose : 1353 * Parameters: 1354 * Variables : 1355 * Result : 1356 * Remark : 1357 * Status : UNTESTED STUB 1358 * 1359 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1360 *****************************************************************************/ 1361 1362 ODINFUNCTION5(LHANDLE,OS2WSAAsyncGetHostByName, 1363 HWND,hWnd, 1364 u_int,wMsg, 1365 const char *,name, 1366 char *,buf, 1367 int,buflen) 1368 { 1369 int rc; 1370 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1371 ULONG ulNewID; 1372 1373 if (hwndRelay == NULL) // already initialized ? 1374 hwndRelay = RelayInitialize(hwndOS2); 1375 1376 // add entry to list, we need to store both our temp buffer and the apps buffer 1377 ulNewID = RelayAlloc(hWnd, 1378 wMsg, 1379 ASYNCREQUEST_GETHOSTBYNAME, 1380 FALSE, 1381 (PVOID)buf, (PVOID)buflen); 1382 1383 // call pmwsock function, will fill our temp buffer 1384 rc = WSAAsyncGetHostByName(hwndRelay, 1385 ulNewID, 1386 name, 1387 buf, 1388 buflen); 1389 1390 // if an error occurs, free the allocated relay entry 1391 if (rc == SOCKET_ERROR) 1392 RelayFree(ulNewID); 1393 1394 return rc; 1395 } 1396 1397 1398 /***************************************************************************** 1399 * Name : 1400 * Purpose : 1401 * Parameters: 1402 * Variables : 1403 * Result : 1404 * Remark : 1405 * Status : UNTESTED STUB 1406 * 1407 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1408 *****************************************************************************/ 1409 1410 ODINFUNCTION7(LHANDLE,OS2WSAAsyncGetHostByAddr, 1411 HWND,hWnd, 1412 u_int,wMsg, 1413 const char *,addr, 1414 int,len, 1415 int,type, 1416 char *,buf, 1417 int,buflen) 1418 { 1419 int rc; 1420 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1421 ULONG ulNewID; 1422 1423 if (hwndRelay == NULL) // already initialized ? 1424 hwndRelay = RelayInitialize(hwndOS2); 1425 1426 // add entry to list, we need to store both our temp buffer and the apps buffer 1427 ulNewID = RelayAlloc(hWnd, 1428 wMsg, 1429 ASYNCREQUEST_GETHOSTBYADDR, 1430 FALSE, 1431 buf); 1432 1433 // call pmwsock function, will fill our temp buffer 1434 rc = WSAAsyncGetHostByAddr(hwndRelay, 1435 ulNewID, 1436 addr, 1437 len, 1438 type, 1439 buf, 1440 buflen); 1441 1442 // if an error occurs, free the allocated relay entry 1443 if (rc == SOCKET_ERROR) 1444 RelayFree(ulNewID); 1445 1446 return (rc); 1447 } 1448 1449 1450 /***************************************************************************** 1451 * Name : 1452 * Purpose : 1453 * Parameters: 1454 * Variables : 1455 * Result : 1456 * Remark : 1457 * Status : UNTESTED STUB 1458 * 1459 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1460 *****************************************************************************/ 1461 1462 ODINFUNCTION1(int,OS2WSACancelAsyncRequest, 1463 LHANDLE,hAsyncTaskHandle) 1464 { 1465 return(WSACancelAsyncRequest(hAsyncTaskHandle)); 1466 } 1467 1468 1469 /***************************************************************************** 1470 * Name : 1471 * Purpose : 1472 * Parameters: 1473 * Variables : 1474 * Result : 1475 * Remark : 1476 * Status : UNTESTED STUB 1477 * 1478 * Author : Patrick Haller [Thu, 1999/11/25 23:00] 1479 *****************************************************************************/ 1480 1481 ODINFUNCTION4(int,OS2WSAAsyncSelect, 1482 SOCKET,s, 1483 HWND,hWnd, 1484 u_int,wMsg, 1485 long,lEvent) 1486 { 1487 int rc; 1488 // int iError; 1489 HWND hwndOS2 = Win32ToOS2Handle(hWnd); 1490 ULONG ulNewID; 1491 1492 if (hwndRelay == NULL) // already initialized ? 1493 hwndRelay = RelayInitialize(hwndOS2); 1494 1495 /* @@@PH: our source window doesn't seem to have an anchor block. 1496 Docs suggest we've missed to call WinInitialize on the 1497 caller thread. 1498 1499 Cause however is the Open32 handle is (of course!) invalid 1500 in plain PM Window Manager! -> use DAPWSOCK 1501 1502 Unfortunately, DAPWSOCK calls WinQueryAnchorBlock(hOpen32), too. 1503 So, we're stuck until I resolve hWnd to it's valid PM 1504 counterpart. 1505 1506 new problem: we've ultimately got to use PostMessageA instead 1507 anything else. => create invisible msg relay window: 1508 - hMsg = registerMessage(hWnd, wMsg) 1509 - call WSAAsyncSelect with object window handle 1510 - overwrite hWnd relay for "same handles" 1511 */ 1512 1513 // add event to list or remove any list entry in case of WSAAsyncSelect(hwnd,0,0) 1514 if ( (wMsg == 0) && (lEvent == 0) ) 1176 1515 { 1177 #ifdef DEBUG 1178 WriteLog("WSOCK32: WSAStartup sock_init returned 0\n"); 1179 #endif 1180 WSASetLastError(ERROR_SUCCESS); 1181 return 0; 1516 // remove entry from list 1517 RelayFreeByHwnd(hWnd); 1182 1518 } 1183 1519 else 1184 { 1185 WSASetLastError(iTranslateSockErrToWSock(sock_errno())); 1186 return(WSASYSNOTREADY); 1187 } 1188 } 1189 1190 1191 /***************************************************************************** 1192 * Name : 1193 * Purpose : 1194 * Parameters: 1195 * Variables : 1196 * Result : 1197 * Remark : 1198 * Status : UNTESTED STUB 1199 * 1200 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1201 *****************************************************************************/ 1202 1203 ODINFUNCTION0(int,OS2WSACleanup) 1204 { 1205 WSASetLastError(ERROR_SUCCESS); 1206 return 0; 1207 } 1208 1209 1210 /***************************************************************************** 1211 * Name : 1212 * Purpose : 1213 * Parameters: 1214 * Variables : 1215 * Result : 1216 * Remark : 1217 * Status : UNTESTED STUB 1218 * 1219 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1220 *****************************************************************************/ 1221 1222 ODINPROCEDURE1(WSASetLastError,int,iError) 1223 { 1224 PWSOCKTHREADDATA pwstd = iQueryWsockThreadData(); 1225 pwstd->dwLastError = iError; 1226 } 1227 1228 1229 /***************************************************************************** 1230 * Name : 1231 * Purpose : 1232 * Parameters: 1233 * Variables : 1234 * Result : 1235 * Remark : 1236 * Status : UNTESTED STUB 1237 * 1238 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1239 *****************************************************************************/ 1240 1241 ODINFUNCTION0(int,WSAGetLastError) 1242 { 1243 PWSOCKTHREADDATA pwstd = iQueryWsockThreadData(); 1244 return(pwstd->dwLastError); 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 [Tue, 1998/06/16 23:00] 1258 *****************************************************************************/ 1259 1260 ODINFUNCTION0(int,OS2WSAUnhookBlockingHook) 1261 { 1262 dprintf(("WSOCK32: WSAUnhookBlockingHook unimplemented\n")); 1263 1264 return -5000; //WSAUnhookBlockingHook(); 1265 } 1266 1267 1268 /***************************************************************************** 1269 * Name : 1270 * Purpose : 1271 * Parameters: 1272 * Variables : 1273 * Result : 1274 * Remark : 1275 * Status : UNTESTED STUB 1276 * 1277 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1278 *****************************************************************************/ 1279 1280 ODINFUNCTION1(PROC,OS2WSASetBlockingHook,PROC,lpBlockFund) 1281 { 1282 dprintf(("WSOCK32: WSASetBlockingHook Unimplemented\n")); 1283 return (PROC)NULL; 1284 } 1285 1286 1287 /***************************************************************************** 1288 * Name : 1289 * Purpose : 1290 * Parameters: 1291 * Variables : 1292 * Result : 1293 * Remark : 1294 * Status : UNTESTED STUB 1295 * 1296 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1297 *****************************************************************************/ 1298 1299 ODINFUNCTION0(int,OS2WSACancelBlockingCall) 1300 { 1301 dprintf(("WSOCK32: WSACancelBlockingCall unimplemented\n")); 1302 1303 return -5000; //WSACancelBlockingCall(); 1304 } 1305 1306 1307 /***************************************************************************** 1308 * Name : 1309 * Purpose : 1310 * Parameters: 1311 * Variables : 1312 * Result : 1313 * Remark : 1314 * Status : UNTESTED STUB 1315 * 1316 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1317 *****************************************************************************/ 1318 1319 ODINFUNCTION4(int, OS2WSARecvEx, SOCKET, s, 1320 char FAR*, buf, 1321 int, len, 1322 int FAR *,flags) 1323 { 1324 dprintf(("WSOCK32: WSARecvEx not implemented.\n")); 1325 1326 // return WSARecvEx(s,buf,len,flags); 1327 return 0; 1328 } 1329 1330 1331 /***************************************************************************** 1332 * Name : 1333 * Purpose : 1334 * Parameters: 1335 * Variables : 1336 * Result : 1337 * Remark : 1338 * Status : UNTESTED STUB 1339 * 1340 * Author : Patrick Haller [Tue, 1998/06/16 23:00] 1341 *****************************************************************************/ 1342 1343 ODINPROCEDURE2(OS2s_perror, char*, pszMessage, 1344 void*, pUnknown) 1345 { 1346 perror(pszMessage); 1347 } 1348 1349 1520 // add entry to list 1521 ulNewID = RelayAlloc(hWnd, 1522 wMsg, 1523 ASYNCREQUEST_SELECT, 1524 TRUE); 1525 1526 rc = WSAAsyncSelect(s, 1527 hwndRelay, 1528 ulNewID, 1529 lEvent); 1530 1531 // iError = WSAGetLastError(); 1532 // dprintf(("res=%d, err=%d\n", 1533 // rc, 1534 // iError)); 1535 return (rc); 1536 }
Note:
See TracChangeset
for help on using the changeset viewer.