ws2_32: Split the async function callback by type of query.

This commit is contained in:
Alexandre Julliard 2009-09-29 18:22:52 +02:00
parent f8ec47d5c6
commit 9c2abfc503
1 changed files with 285 additions and 204 deletions

View File

@ -2,6 +2,7 @@
*
* Copyright (C) 1993,1994,1996,1997 John Brezak, Erik Bos, Alex Korobka.
* Copyright (C) 1999 Marcus Meissner
* Copyright (C) 2009 Alexandre Julliard
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -132,8 +133,6 @@ UINT wsaHerrno(int errnr);
#define AQ_WIN16 0x00
#define AQ_WIN32 0x04
#define HB_WIN32(hb) (hb->flags & AQ_WIN32)
#define AQ_NUMBER 0x00
#define AQ_NAME 0x08
#define AQ_COPYPTR1 0x10
#define AQ_DUPLOWPTR1 0x20
#define AQ_MASKPTR1 0x30
@ -141,15 +140,38 @@ UINT wsaHerrno(int errnr);
#define AQ_DUPLOWPTR2 0x80
#define AQ_MASKPTR2 0xC0
#define AQ_GETHOST 0
#define AQ_GETPROTO 1
#define AQ_GETSERV 2
#define AQ_GETMASK 3
/* The handles used are pseudo-handles that can be simply casted. */
/* 16-bit values are used internally (to be sure handle comparison works right in 16-bit apps). */
#define WSA_H32(h16) ((HANDLE)(ULONG_PTR)(h16))
/* Generic async query struct. we use symbolic names for the different queries
* for readability.
*/
typedef struct _async_query {
HWND16 hWnd;
UINT16 uMsg;
LPCSTR ptr1;
#define host_name ptr1
#define host_addr ptr1
#define serv_name ptr1
#define proto_name ptr1
LPCSTR ptr2;
#define serv_proto ptr2
int int1;
#define host_len int1
#define proto_number int1
#define serv_port int1
int int2;
#define host_type int2
SEGPTR sbuf;
INT16 sbuflen;
HANDLE16 async_handle;
int flags;
int qt;
char xbuf[1];
} async_query;
/* ----------------------------------- helper functions - */
static int list_size(char** l, int item_size)
@ -180,6 +202,13 @@ static int list_dup(char** l_src, char* ref, char* base, int item_size)
return (p - ref);
}
static DWORD finish_query( async_query *aq, LPARAM lparam )
{
PostMessageW( HWND_32(aq->hWnd), aq->uMsg, (WPARAM)aq->async_handle, lparam );
HeapFree( GetProcessHeap(), 0, aq );
return 0;
}
/* ----- hostent */
static int hostent_size(struct hostent* p_he)
@ -239,6 +268,93 @@ static int WS_copy_he(char *p_to,char *p_base,int t_size,struct hostent* p_he, i
return size;
}
static DWORD WINAPI async_gethostbyname(LPVOID arg)
{
async_query *aq = arg;
int size = 0;
WORD fail = 0;
struct hostent *he;
char *copy_hostent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
#ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
char *extrabuf;
int ebufsize=1024;
struct hostent hostentry;
int locerr = ENOBUFS;
#endif
char buf[100];
if( !(aq->host_name)) {
aq->host_name = buf;
if( gethostname( buf, 100) == -1) {
fail = WSAENOBUFS; /* appropriate ? */
goto done;
}
}
#ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
he = NULL;
extrabuf=HeapAlloc(GetProcessHeap(),0,ebufsize) ;
while(extrabuf) {
if (gethostbyname_r(aq->host_name, &hostentry, extrabuf, ebufsize, &he, &locerr) != ERANGE) break;
ebufsize *=2;
extrabuf=HeapReAlloc(GetProcessHeap(),0,extrabuf,ebufsize) ;
}
if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
else fail = ((locerr < 0) ? wsaErrno() : wsaHerrno(locerr));
HeapFree(GetProcessHeap(),0,extrabuf);
#else
EnterCriticalSection( &csWSgetXXXbyYYY );
he = gethostbyname(aq->host_name);
if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
else fail = ((h_errno < 0) ? wsaErrno() : wsaHerrno(h_errno));
LeaveCriticalSection( &csWSgetXXXbyYYY );
#endif
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
done:
return finish_query( aq, MAKELPARAM( size, fail ));
}
static DWORD WINAPI async_gethostbyaddr(LPVOID arg)
{
async_query *aq = arg;
int size = 0;
WORD fail = 0;
struct hostent *he;
char *copy_hostent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
#ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
char *extrabuf;
int ebufsize=1024;
struct hostent hostentry;
int locerr = ENOBUFS;
he = NULL;
extrabuf=HeapAlloc(GetProcessHeap(),0,ebufsize) ;
while(extrabuf) {
if (gethostbyaddr_r(aq->host_addr,aq->host_len,aq->host_type,
&hostentry, extrabuf, ebufsize, &he, &locerr) != ERANGE) break;
ebufsize *=2;
extrabuf=HeapReAlloc(GetProcessHeap(),0,extrabuf,ebufsize) ;
}
if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
else fail = ((locerr < 0) ? wsaErrno() : wsaHerrno(locerr));
HeapFree(GetProcessHeap(),0,extrabuf);
#else
EnterCriticalSection( &csWSgetXXXbyYYY );
he = gethostbyaddr(aq->host_addr,aq->host_len,aq->host_type);
if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
else fail = ((h_errno < 0) ? wsaErrno() : wsaHerrno(h_errno));
LeaveCriticalSection( &csWSgetXXXbyYYY );
#endif
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
return finish_query( aq, MAKELPARAM( size, fail ));
}
/* ----- protoent */
static int protoent_size(struct protoent* p_pe)
@ -290,6 +406,64 @@ static int WS_copy_pe(char *p_to,char *p_base,int t_size,struct protoent* p_pe,
return size;
}
static DWORD WINAPI async_getprotobyname(LPVOID arg)
{
async_query *aq = arg;
int size = 0;
WORD fail = 0;
#ifdef HAVE_GETPROTOBYNAME
struct protoent *pe;
char *copy_protoent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
EnterCriticalSection( &csWSgetXXXbyYYY );
pe = getprotobyname(aq->proto_name);
if (pe) {
size = WS_copy_pe(copy_protoent,(char*)aq->sbuf,aq->sbuflen,pe,aq->flags);
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
} else {
MESSAGE("protocol %s not found; You might want to add "
"this to /etc/protocols\n", debugstr_a(aq->proto_name) );
fail = WSANO_DATA;
}
LeaveCriticalSection( &csWSgetXXXbyYYY );
#else
fail = WSANO_DATA;
#endif
return finish_query( aq, MAKELPARAM( size, fail ));
}
static DWORD WINAPI async_getprotobynumber(LPVOID arg)
{
async_query *aq = arg;
int size = 0;
WORD fail = 0;
#ifdef HAVE_GETPROTOBYNUMBER
struct protoent *pe;
char *copy_protoent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
EnterCriticalSection( &csWSgetXXXbyYYY );
pe = getprotobynumber(aq->proto_number);
if (pe) {
size = WS_copy_pe(copy_protoent,(char*)aq->sbuf,aq->sbuflen,pe,aq->flags);
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
} else {
MESSAGE("protocol number %d not found; You might want to add "
"this to /etc/protocols\n", aq->proto_number );
fail = WSANO_DATA;
}
LeaveCriticalSection( &csWSgetXXXbyYYY );
#else
fail = WSANO_DATA;
#endif
return finish_query( aq, MAKELPARAM( size, fail ));
}
/* ----- servent */
static int servent_size(struct servent* p_se)
@ -347,146 +521,16 @@ static int WS_copy_se(char *p_to,char *p_base,int t_size,struct servent* p_se, i
return size;
}
static HANDLE16 __ws_async_handle = 0xdead;
/* Generic async query struct. we use symbolic names for the different queries
* for readability.
*/
typedef struct _async_query {
HWND16 hWnd;
UINT16 uMsg;
LPCSTR ptr1;
#define host_name ptr1
#define host_addr ptr1
#define serv_name ptr1
#define proto_name ptr1
LPCSTR ptr2;
#define serv_proto ptr2
int int1;
#define host_len int1
#define proto_number int1
#define serv_port int1
int int2;
#define host_type int2
SEGPTR sbuf;
INT16 sbuflen;
HANDLE16 async_handle;
int flags;
int qt;
char xbuf[1];
} async_query;
/****************************************************************************
* The async query function.
*
* It is either called as a thread startup routine or directly. It has
* to free the passed arg from the process heap and PostMessageA the async
* result or the error code.
*
* FIXME:
* - errorhandling not verified.
*/
static DWORD WINAPI _async_queryfun(LPVOID arg) {
async_query *aq = (async_query*)arg;
static DWORD WINAPI async_getservbyname(LPVOID arg)
{
async_query *aq = arg;
int size = 0;
WORD fail = 0;
char *targetptr = (HB_WIN32(aq)?(char*)aq->sbuf:(char*)MapSL(aq->sbuf));
switch (aq->flags & AQ_GETMASK) {
case AQ_GETHOST: {
struct hostent *he;
char *copy_hostent = targetptr;
#ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
char *extrabuf;
int ebufsize=1024;
struct hostent hostentry;
int locerr = ENOBUFS;
#endif
char buf[100];
if( !(aq->host_name)) {
aq->host_name = buf;
if( gethostname( buf, 100) == -1) {
fail = WSAENOBUFS; /* appropriate ? */
break;
}
}
#ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
he = NULL;
extrabuf=HeapAlloc(GetProcessHeap(),0,ebufsize) ;
while(extrabuf) {
int res = (aq->flags & AQ_NAME) ?
gethostbyname_r(aq->host_name,
&hostentry, extrabuf, ebufsize, &he, &locerr):
gethostbyaddr_r(aq->host_addr,aq->host_len,aq->host_type,
&hostentry, extrabuf, ebufsize, &he, &locerr);
if( res != ERANGE) break;
ebufsize *=2;
extrabuf=HeapReAlloc(GetProcessHeap(),0,extrabuf,ebufsize) ;
}
if (!he) fail = ((locerr < 0) ? wsaErrno() : wsaHerrno(locerr));
#else
EnterCriticalSection( &csWSgetXXXbyYYY );
he = (aq->flags & AQ_NAME) ?
gethostbyname(aq->host_name):
gethostbyaddr(aq->host_addr,aq->host_len,aq->host_type);
if (!he) fail = ((h_errno < 0) ? wsaErrno() : wsaHerrno(h_errno));
#endif
if (he) {
size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
}
#ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
HeapFree(GetProcessHeap(),0,extrabuf);
#else
LeaveCriticalSection( &csWSgetXXXbyYYY );
#endif
}
break;
case AQ_GETPROTO: {
#if defined(HAVE_GETPROTOBYNAME) && defined(HAVE_GETPROTOBYNUMBER)
struct protoent *pe;
char *copy_protoent = targetptr;
EnterCriticalSection( &csWSgetXXXbyYYY );
pe = (aq->flags & AQ_NAME)?
getprotobyname(aq->proto_name) :
getprotobynumber(aq->proto_number);
if (pe) {
size = WS_copy_pe(copy_protoent,(char*)aq->sbuf,aq->sbuflen,pe,aq->flags);
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
} else {
if (aq->flags & AQ_NAME)
MESSAGE("protocol %s not found; You might want to add "
"this to /etc/protocols\n", debugstr_a(aq->proto_name) );
else
MESSAGE("protocol number %d not found; You might want to add "
"this to /etc/protocols\n", aq->proto_number );
fail = WSANO_DATA;
}
LeaveCriticalSection( &csWSgetXXXbyYYY );
#else
fail = WSANO_DATA;
#endif
}
break;
case AQ_GETSERV: {
struct servent *se;
char *copy_servent = targetptr;
char *copy_servent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
EnterCriticalSection( &csWSgetXXXbyYYY );
se = (aq->flags & AQ_NAME)?
getservbyname(aq->serv_name,aq->serv_proto) :
#ifdef HAVE_GETSERVBYPORT
getservbyport(aq->serv_port,aq->serv_proto);
#else
NULL;
#endif
se = getservbyname(aq->serv_name,aq->serv_proto);
if (se) {
size = WS_copy_se(copy_servent,(char*)aq->sbuf,aq->sbuflen,se,aq->flags);
if (size < 0) {
@ -494,25 +538,48 @@ static DWORD WINAPI _async_queryfun(LPVOID arg) {
size = -size;
}
} else {
if (aq->flags & AQ_NAME)
MESSAGE("service %s protocol %s not found; You might want to add "
"this to /etc/services\n", debugstr_a(aq->serv_name) ,
aq->serv_proto ? debugstr_a(aq->serv_proto ):"*");
else
fail = WSANO_DATA;
}
LeaveCriticalSection( &csWSgetXXXbyYYY );
return finish_query( aq, MAKELPARAM( size, fail ));
}
static DWORD WINAPI async_getservbyport(LPVOID arg)
{
async_query *aq = arg;
int size = 0;
WORD fail = 0;
struct servent *se;
char *copy_servent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
EnterCriticalSection( &csWSgetXXXbyYYY );
#ifdef HAVE_GETSERVBYPORT
se = getservbyport(aq->serv_port,aq->serv_proto);
if (se) {
size = WS_copy_se(copy_servent,(char*)aq->sbuf,aq->sbuflen,se,aq->flags);
if (size < 0) {
fail = WSAENOBUFS;
size = -size;
}
} else {
MESSAGE("service on port %d protocol %s not found; You might want to add "
"this to /etc/services\n", aq->serv_port,
aq->serv_proto ? debugstr_a(aq->serv_proto ):"*");
fail = WSANO_DATA;
}
#else
fail = WSANO_DATA;
#endif
LeaveCriticalSection( &csWSgetXXXbyYYY );
}
break;
}
PostMessageA(HWND_32(aq->hWnd),aq->uMsg,(WPARAM) aq->async_handle,size|(fail<<16));
HeapFree(GetProcessHeap(),0,arg);
return 0;
return finish_query( aq, MAKELPARAM( size, fail ));
}
static HANDLE16 __ws_async_handle = 0xdead;
/****************************************************************************
* The main async help function.
*
@ -520,15 +587,15 @@ static DWORD WINAPI _async_queryfun(LPVOID arg) {
* with no thread support. This relies on the fact that PostMessage() does
* not actually call the windowproc before the function returns.
*/
static HANDLE16 __WSAsyncDBQuery(
HWND hWnd, UINT uMsg,INT int1,LPCSTR ptr1, INT int2, LPCSTR ptr2,
void *sbuf, INT sbuflen, UINT flags
)
static HANDLE16 __WSAsyncDBQuery( HWND hWnd, UINT uMsg, LPTHREAD_START_ROUTINE func,
INT int1,LPCSTR ptr1, INT int2, LPCSTR ptr2,
void *sbuf, INT sbuflen, UINT flags )
{
async_query* aq;
char* pto;
LPCSTR pfm;
int xbuflen = 0;
HANDLE thread;
/* allocate buffer to copy protocol- and service name to */
/* note: this is done in the calling thread so we can return */
@ -575,10 +642,13 @@ static HANDLE16 __WSAsyncDBQuery(
aq->sbuf = (SEGPTR)sbuf;
aq->sbuflen = sbuflen;
#if 1
if (CreateThread(NULL,0,_async_queryfun,aq,0,NULL) == INVALID_HANDLE_VALUE)
#endif
_async_queryfun(aq);
thread = CreateThread( NULL, 0, func, aq, 0, NULL );
if (!thread)
{
SetLastError( WSAEWOULDBLOCK );
return 0;
}
CloseHandle( thread );
return __ws_async_handle;
}
@ -591,9 +661,9 @@ HANDLE16 WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 uMsg, LPCSTR addr,
{
TRACE("hwnd %04x, msg %04x, addr %08x[%i]\n",
hWnd, uMsg, (unsigned)addr , len );
return __WSAsyncDBQuery(HWND_32(hWnd),uMsg,len,addr,type,NULL,
(void*)sbuf,buflen,
AQ_NUMBER|AQ_COPYPTR1|AQ_WIN16|AQ_GETHOST);
return __WSAsyncDBQuery(HWND_32(hWnd), uMsg, async_gethostbyaddr,
len,addr,type,NULL, (void*)sbuf,buflen,
AQ_COPYPTR1|AQ_WIN16);
}
/***********************************************************************
@ -604,8 +674,9 @@ HANDLE WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
{
TRACE("hwnd %p, msg %04x, addr %08x[%i]\n",
hWnd, uMsg, (unsigned)addr , len );
return WSA_H32( __WSAsyncDBQuery(hWnd,uMsg,len,addr,type,NULL,sbuf,buflen,
AQ_NUMBER|AQ_COPYPTR1|AQ_WIN32|AQ_GETHOST));
return WSA_H32( __WSAsyncDBQuery( hWnd, uMsg, async_gethostbyaddr,
len,addr,type,NULL,sbuf,buflen,
AQ_COPYPTR1|AQ_WIN32));
}
/***********************************************************************
@ -616,9 +687,10 @@ HANDLE16 WINAPI WSAAsyncGetHostByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,
{
TRACE("hwnd %04x, msg %04x, host %s, buffer %i\n",
hWnd, uMsg, (name)?name:"<null>", (int)buflen );
return __WSAsyncDBQuery(HWND_32(hWnd),uMsg,0,name,0,NULL,
return __WSAsyncDBQuery(HWND_32(hWnd), uMsg, async_gethostbyname,
0,name,0,NULL,
(void*)sbuf,buflen,
AQ_NAME|AQ_DUPLOWPTR1|AQ_WIN16|AQ_GETHOST);
AQ_DUPLOWPTR1|AQ_WIN16);
}
/***********************************************************************
@ -629,8 +701,9 @@ HANDLE WINAPI WSAAsyncGetHostByName(HWND hWnd, UINT uMsg, LPCSTR name,
{
TRACE("hwnd %p, msg %08x, host %s, buffer %i\n",
hWnd, uMsg, (name)?name:"<null>", buflen );
return WSA_H32( __WSAsyncDBQuery(hWnd,uMsg,0,name,0,NULL,sbuf,buflen,
AQ_NAME|AQ_DUPLOWPTR1|AQ_WIN32|AQ_GETHOST));
return WSA_H32( __WSAsyncDBQuery(hWnd, uMsg, async_gethostbyname,
0,name,0,NULL,sbuf,buflen,
AQ_DUPLOWPTR1|AQ_WIN32));
}
/***********************************************************************
@ -641,9 +714,10 @@ HANDLE16 WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,
{
TRACE("hwnd %04x, msg %08x, protocol %s\n",
hWnd, uMsg, (name)?name:"<null>" );
return __WSAsyncDBQuery(HWND_32(hWnd),uMsg,0,name,0,NULL,
return __WSAsyncDBQuery(HWND_32(hWnd), uMsg, async_getprotobyname,
0,name,0,NULL,
(void*)sbuf,buflen,
AQ_NAME|AQ_DUPLOWPTR1|AQ_WIN16|AQ_GETPROTO);
AQ_DUPLOWPTR1|AQ_WIN16);
}
/***********************************************************************
@ -654,8 +728,9 @@ HANDLE WINAPI WSAAsyncGetProtoByName(HWND hWnd, UINT uMsg, LPCSTR name,
{
TRACE("hwnd %p, msg %08x, protocol %s\n",
hWnd, uMsg, (name)?name:"<null>" );
return WSA_H32( __WSAsyncDBQuery(hWnd,uMsg,0,name,0,NULL,sbuf,buflen,
AQ_NAME|AQ_DUPLOWPTR1|AQ_WIN32|AQ_GETPROTO));
return WSA_H32( __WSAsyncDBQuery(hWnd, uMsg, async_getprotobyname,
0,name,0,NULL,sbuf,buflen,
AQ_DUPLOWPTR1|AQ_WIN32));
}
@ -666,9 +741,10 @@ HANDLE16 WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd,UINT16 uMsg,INT16 number,
SEGPTR sbuf, INT16 buflen)
{
TRACE("hwnd %04x, msg %04x, num %i\n", hWnd, uMsg, number );
return __WSAsyncDBQuery(HWND_32(hWnd),uMsg,number,NULL,0,NULL,
return __WSAsyncDBQuery(HWND_32(hWnd), uMsg, async_getprotobynumber,
number,NULL,0,NULL,
(void*)sbuf,buflen,
AQ_GETPROTO|AQ_NUMBER|AQ_WIN16);
AQ_WIN16);
}
/***********************************************************************
@ -678,8 +754,9 @@ HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND hWnd, UINT uMsg, INT number,
LPSTR sbuf, INT buflen)
{
TRACE("hwnd %p, msg %04x, num %i\n", hWnd, uMsg, number );
return WSA_H32( __WSAsyncDBQuery(hWnd,uMsg,number,NULL,0,NULL,sbuf,buflen,
AQ_GETPROTO|AQ_NUMBER|AQ_WIN32));
return WSA_H32( __WSAsyncDBQuery(hWnd, uMsg, async_getprotobynumber,
number,NULL,0,NULL,sbuf,buflen,
AQ_WIN32));
}
/***********************************************************************
@ -690,9 +767,10 @@ HANDLE16 WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,
{
TRACE("hwnd %04x, msg %04x, name %s, proto %s\n",
hWnd, uMsg, (name)?name:"<null>", (proto)?proto:"<null>");
return __WSAsyncDBQuery(HWND_32(hWnd),uMsg,0,name,0,proto,
return __WSAsyncDBQuery(HWND_32(hWnd), uMsg, async_getservbyname,
0,name,0,proto,
(void*)sbuf,buflen,
AQ_GETSERV|AQ_NAME|AQ_DUPLOWPTR1|AQ_DUPLOWPTR2|AQ_WIN16);
AQ_DUPLOWPTR1|AQ_DUPLOWPTR2|AQ_WIN16);
}
/***********************************************************************
@ -703,8 +781,9 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
{
TRACE("hwnd %p, msg %04x, name %s, proto %s\n",
hWnd, uMsg, (name)?name:"<null>", (proto)?proto:"<null>");
return WSA_H32( __WSAsyncDBQuery(hWnd,uMsg,0,name,0,proto,sbuf,buflen,
AQ_GETSERV|AQ_NAME|AQ_DUPLOWPTR1|AQ_DUPLOWPTR2|AQ_WIN32));
return WSA_H32( __WSAsyncDBQuery( hWnd, uMsg,async_getservbyname,
0,name,0,proto,sbuf,buflen,
AQ_DUPLOWPTR1|AQ_DUPLOWPTR2|AQ_WIN32));
}
/***********************************************************************
@ -715,9 +794,10 @@ HANDLE16 WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 uMsg, INT16 port,
{
TRACE("hwnd %04x, msg %04x, port %i, proto %s\n",
hWnd, uMsg, port, (proto)?proto:"<null>" );
return __WSAsyncDBQuery(HWND_32(hWnd),uMsg,port,NULL,0,proto,
return __WSAsyncDBQuery(HWND_32(hWnd), uMsg, async_getservbyport,
port,NULL,0,proto,
(void*)sbuf,buflen,
AQ_GETSERV|AQ_NUMBER|AQ_DUPLOWPTR2|AQ_WIN16);
AQ_DUPLOWPTR2|AQ_WIN16);
}
/***********************************************************************
@ -728,8 +808,9 @@ HANDLE WINAPI WSAAsyncGetServByPort(HWND hWnd, UINT uMsg, INT port,
{
TRACE("hwnd %p, msg %04x, port %i, proto %s\n",
hWnd, uMsg, port, (proto)?proto:"<null>" );
return WSA_H32( __WSAsyncDBQuery(hWnd,uMsg,port,NULL,0,proto,sbuf,buflen,
AQ_GETSERV|AQ_NUMBER|AQ_DUPLOWPTR2|AQ_WIN32));
return WSA_H32( __WSAsyncDBQuery( hWnd, uMsg, async_getservbyport,
port,NULL,0,proto,sbuf,buflen,
AQ_DUPLOWPTR2|AQ_WIN32));
}
/***********************************************************************