Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-fonts
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aleksandr Isakov
wine-fonts
Commits
252925fe
Commit
252925fe
authored
Sep 29, 2009
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ws2_32: Move the 16-bit async functions to socket16.c.
parent
4ad0c4d8
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
372 additions
and
162 deletions
+372
-162
async.c
dlls/ws2_32/async.c
+1
-144
socket16.c
dlls/ws2_32/socket16.c
+371
-18
No files found.
dlls/ws2_32/async.c
View file @
252925fe
...
...
@@ -478,29 +478,6 @@ static HANDLE run_query( HWND hWnd, UINT uMsg, LPTHREAD_START_ROUTINE func,
/***********************************************************************
* WSAAsyncGetHostByAddr (WINSOCK.102)
*/
HANDLE16
WINAPI
WSAAsyncGetHostByAddr16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
addr
,
INT16
len
,
INT16
type
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_gethostbyaddr
*
aq
;
TRACE
(
"hwnd %04x, msg %04x, addr %p[%i]
\n
"
,
hWnd
,
uMsg
,
addr
,
len
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
host_addr
=
(
char
*
)(
aq
+
1
);
aq
->
host_len
=
len
;
aq
->
host_type
=
type
;
memcpy
(
aq
->
host_addr
,
addr
,
len
);
return
WSA_H16
(
run_query
(
HWND_32
(
hWnd
),
uMsg
,
async_gethostbyaddr
,
&
aq
->
query
,
(
void
*
)
sbuf
,
buflen
,
AQ_WIN16
));
}
/***********************************************************************
* WSAAsyncGetHostByAddr (WS2_32.102)
*/
HANDLE
WINAPI
WSAAsyncGetHostByAddr
(
HWND
hWnd
,
UINT
uMsg
,
LPCSTR
addr
,
...
...
@@ -523,28 +500,6 @@ HANDLE WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
}
/***********************************************************************
* WSAAsyncGetHostByName (WINSOCK.103)
*/
HANDLE16
WINAPI
WSAAsyncGetHostByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_gethostbyname
*
aq
;
unsigned
int
len
=
strlen
(
name
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, host %s, buffer %i
\n
"
,
hWnd
,
uMsg
,
debugstr_a
(
name
),
buflen
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
host_name
=
(
char
*
)(
aq
+
1
);
strcpy
(
aq
->
host_name
,
name
);
return
WSA_H16
(
run_query
(
HWND_32
(
hWnd
),
uMsg
,
async_gethostbyname
,
&
aq
->
query
,
(
void
*
)
sbuf
,
buflen
,
AQ_WIN16
));
}
/***********************************************************************
* WSAAsyncGetHostByName (WS2_32.103)
*/
HANDLE
WINAPI
WSAAsyncGetHostByName
(
HWND
hWnd
,
UINT
uMsg
,
LPCSTR
name
,
...
...
@@ -566,28 +521,6 @@ HANDLE WINAPI WSAAsyncGetHostByName(HWND hWnd, UINT uMsg, LPCSTR name,
}
/***********************************************************************
* WSAAsyncGetProtoByName (WINSOCK.105)
*/
HANDLE16
WINAPI
WSAAsyncGetProtoByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getprotobyname
*
aq
;
unsigned
int
len
=
strlen
(
name
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, proto %s, buffer %i
\n
"
,
hWnd
,
uMsg
,
debugstr_a
(
name
),
buflen
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
proto_name
=
(
char
*
)(
aq
+
1
);
strcpy
(
aq
->
proto_name
,
name
);
return
WSA_H16
(
run_query
(
HWND_32
(
hWnd
),
uMsg
,
async_getprotobyname
,
&
aq
->
query
,
(
void
*
)
sbuf
,
buflen
,
AQ_WIN16
));
}
/***********************************************************************
* WSAAsyncGetProtoByName (WS2_32.105)
*/
HANDLE
WINAPI
WSAAsyncGetProtoByName
(
HWND
hWnd
,
UINT
uMsg
,
LPCSTR
name
,
...
...
@@ -610,26 +543,6 @@ HANDLE WINAPI WSAAsyncGetProtoByName(HWND hWnd, UINT uMsg, LPCSTR name,
/***********************************************************************
* WSAAsyncGetProtoByNumber (WINSOCK.104)
*/
HANDLE16
WINAPI
WSAAsyncGetProtoByNumber16
(
HWND16
hWnd
,
UINT16
uMsg
,
INT16
number
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getprotobynumber
*
aq
;
TRACE
(
"hwnd %04x, msg %04x, num %i
\n
"
,
hWnd
,
uMsg
,
number
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
proto_number
=
number
;
return
WSA_H16
(
run_query
(
HWND_32
(
hWnd
),
uMsg
,
async_getprotobynumber
,
&
aq
->
query
,
(
void
*
)
sbuf
,
buflen
,
AQ_WIN16
));
}
/***********************************************************************
* WSAAsyncGetProtoByNumber (WS2_32.104)
*/
HANDLE
WINAPI
WSAAsyncGetProtoByNumber
(
HWND
hWnd
,
UINT
uMsg
,
INT
number
,
...
...
@@ -649,31 +562,6 @@ HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND hWnd, UINT uMsg, INT number,
}
/***********************************************************************
* WSAAsyncGetServByName (WINSOCK.107)
*/
HANDLE16
WINAPI
WSAAsyncGetServByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
LPCSTR
proto
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getservbyname
*
aq
;
unsigned
int
len1
=
strlen
(
name
)
+
1
;
unsigned
int
len2
=
strlen
(
proto
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, name %s, proto %s
\n
"
,
hWnd
,
uMsg
,
debugstr_a
(
name
),
debugstr_a
(
proto
));
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len1
+
len2
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
serv_name
=
(
char
*
)(
aq
+
1
);
aq
->
serv_proto
=
aq
->
serv_name
+
len1
;
strcpy
(
aq
->
serv_name
,
name
);
strcpy
(
aq
->
serv_proto
,
proto
);
return
WSA_H16
(
run_query
(
HWND_32
(
hWnd
),
uMsg
,
async_getservbyname
,
&
aq
->
query
,
(
void
*
)
sbuf
,
buflen
,
AQ_WIN16
));
}
/***********************************************************************
* WSAAsyncGetServByName (WS2_32.107)
*/
HANDLE
WINAPI
WSAAsyncGetServByName
(
HWND
hWnd
,
UINT
uMsg
,
LPCSTR
name
,
...
...
@@ -698,29 +586,6 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
}
/***********************************************************************
* WSAAsyncGetServByPort (WINSOCK.106)
*/
HANDLE16
WINAPI
WSAAsyncGetServByPort16
(
HWND16
hWnd
,
UINT16
uMsg
,
INT16
port
,
LPCSTR
proto
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getservbyport
*
aq
;
unsigned
int
len
=
strlen
(
proto
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, port %i, proto %s
\n
"
,
hWnd
,
uMsg
,
port
,
debugstr_a
(
proto
));
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
serv_proto
=
(
char
*
)(
aq
+
1
);
aq
->
serv_port
=
port
;
strcpy
(
aq
->
serv_proto
,
proto
);
return
WSA_H16
(
run_query
(
HWND_32
(
hWnd
),
uMsg
,
async_getservbyport
,
&
aq
->
query
,
(
void
*
)
sbuf
,
buflen
,
AQ_WIN16
));
}
/***********************************************************************
* WSAAsyncGetServByPort (WS2_32.106)
*/
HANDLE
WINAPI
WSAAsyncGetServByPort
(
HWND
hWnd
,
UINT
uMsg
,
INT
port
,
...
...
@@ -752,14 +617,6 @@ INT WINAPI WSACancelAsyncRequest(HANDLE hAsyncTaskHandle)
}
/***********************************************************************
* WSACancelAsyncRequest (WINSOCK.108)
*/
INT16
WINAPI
WSACancelAsyncRequest16
(
HANDLE16
hAsyncTaskHandle
)
{
return
(
INT16
)
WSACancelAsyncRequest
(
WSA_H32
(
hAsyncTaskHandle
));
}
/***********************************************************************
* WSApSetPostRoutine (WS2_32.24)
*/
INT
WINAPI
WSApSetPostRoutine
(
LPWPUPOSTMESSAGE
lpPostRoutine
)
...
...
@@ -769,7 +626,7 @@ INT WINAPI WSApSetPostRoutine(LPWPUPOSTMESSAGE lpPostRoutine)
}
/***********************************************************************
* (WS2_32.25)
*
WPUCompleteOverlappedRequest
(WS2_32.25)
*/
WSAEVENT
WINAPI
WPUCompleteOverlappedRequest
(
SOCKET
s
,
LPWSAOVERLAPPED
overlapped
,
DWORD
error
,
DWORD
transferred
,
LPINT
errcode
)
...
...
dlls/ws2_32/socket16.c
View file @
252925fe
...
...
@@ -26,10 +26,60 @@
#include "wine/winbase16.h"
#include "wine/winsock16.h"
#include "wownt32.h"
#include "winuser.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
winsock
);
struct
async_query_header
{
HWND
hWnd
;
UINT
uMsg
;
SEGPTR
sbuf
;
INT
sbuflen
;
HANDLE16
handle
;
};
struct
async_query_gethostbyname
{
struct
async_query_header
query
;
char
*
host_name
;
};
struct
async_query_gethostbyaddr
{
struct
async_query_header
query
;
char
*
host_addr
;
int
host_len
;
int
host_type
;
};
struct
async_query_getprotobyname
{
struct
async_query_header
query
;
char
*
proto_name
;
};
struct
async_query_getprotobynumber
{
struct
async_query_header
query
;
int
proto_number
;
};
struct
async_query_getservbyname
{
struct
async_query_header
query
;
char
*
serv_name
;
char
*
serv_proto
;
};
struct
async_query_getservbyport
{
struct
async_query_header
query
;
char
*
serv_proto
;
int
serv_port
;
};
static
INT
num_startup
;
/* reference counter */
static
void
*
he_buffer
;
static
SEGPTR
he_buffer_seg
;
...
...
@@ -57,6 +107,13 @@ static ws_fd_set16 *ws_fdset_32_to_16( const WS_fd_set *set32, ws_fd_set16 *set1
return
set16
;
}
static
DWORD
finish_query
(
struct
async_query_header
*
query
,
LPARAM
lparam
)
{
PostMessageW
(
query
->
hWnd
,
query
->
uMsg
,
(
WPARAM
)
query
->
handle
,
lparam
);
HeapFree
(
GetProcessHeap
(),
0
,
query
);
return
0
;
}
static
int
list_size
(
char
**
l
,
int
item_size
)
{
int
i
,
j
=
0
;
...
...
@@ -134,18 +191,26 @@ static SEGPTR get_buffer_pe(int size)
* and handle all Win16/Win32 dependent things (struct size, ...) *correctly*.
* Ditto for protoent and servent.
*/
static
SEGPTR
ws_hostent_32_to_16
(
const
struct
WS_hostent
*
he
)
static
SEGPTR
ws_hostent_32_to_16
(
const
struct
WS_hostent
*
he
,
SEGPTR
base
,
int
*
buff_size
)
{
char
*
p
;
SEGPTR
base
;
struct
ws_hostent16
*
p_to
;
int
size
=
(
sizeof
(
*
he
)
+
int
size
=
(
sizeof
(
*
p_to
)
+
strlen
(
he
->
h_name
)
+
1
+
list_size
(
he
->
h_aliases
,
0
)
+
list_size
(
he
->
h_addr_list
,
he
->
h_length
));
base
=
get_buffer_he
(
size
);
if
(
buff_size
)
{
if
(
*
buff_size
<
size
)
{
*
buff_size
=
size
;
return
0
;
}
*
buff_size
=
size
;
}
else
base
=
get_buffer_he
(
size
);
p_to
=
MapSL
(
base
);
p_to
->
h_addrtype
=
he
->
h_addrtype
;
...
...
@@ -165,17 +230,25 @@ static SEGPTR ws_hostent_32_to_16( const struct WS_hostent* he )
return
base
;
}
static
SEGPTR
ws_protoent_32_to_16
(
const
struct
WS_protoent
*
pe
)
static
SEGPTR
ws_protoent_32_to_16
(
const
struct
WS_protoent
*
pe
,
SEGPTR
base
,
int
*
buff_size
)
{
char
*
p
;
SEGPTR
base
;
struct
ws_protoent16
*
p_to
;
int
size
=
(
sizeof
(
*
p
e
)
+
int
size
=
(
sizeof
(
*
p
_to
)
+
strlen
(
pe
->
p_name
)
+
1
+
list_size
(
pe
->
p_aliases
,
0
));
base
=
get_buffer_pe
(
size
);
if
(
buff_size
)
{
if
(
*
buff_size
<
size
)
{
*
buff_size
=
size
;
return
0
;
}
*
buff_size
=
size
;
}
else
base
=
get_buffer_pe
(
size
);
p_to
=
MapSL
(
base
);
p_to
->
p_proto
=
pe
->
p_proto
;
...
...
@@ -191,18 +264,26 @@ static SEGPTR ws_protoent_32_to_16( const struct WS_protoent *pe )
return
base
;
}
static
SEGPTR
ws_servent_32_to_16
(
const
struct
WS_servent
*
se
)
static
SEGPTR
ws_servent_32_to_16
(
const
struct
WS_servent
*
se
,
SEGPTR
base
,
int
*
buff_size
)
{
char
*
p
;
SEGPTR
base
;
struct
ws_servent16
*
p_to
;
int
size
=
(
sizeof
(
*
se
)
+
int
size
=
(
sizeof
(
*
p_to
)
+
strlen
(
se
->
s_proto
)
+
1
+
strlen
(
se
->
s_name
)
+
1
+
list_size
(
se
->
s_aliases
,
0
));
base
=
get_buffer_se
(
size
);
if
(
buff_size
)
{
if
(
*
buff_size
<
size
)
{
*
buff_size
=
size
;
return
0
;
}
*
buff_size
=
size
;
}
else
base
=
get_buffer_se
(
size
);
p_to
=
MapSL
(
base
);
p_to
->
s_port
=
se
->
s_port
;
...
...
@@ -222,6 +303,140 @@ static SEGPTR ws_servent_32_to_16( const struct WS_servent *se )
return
base
;
}
static
DWORD
WINAPI
async_gethostbyname
(
LPVOID
arg
)
{
struct
async_query_gethostbyname
*
aq
=
arg
;
int
size
=
0
;
WORD
fail
=
0
;
struct
WS_hostent
*
he
;
if
((
he
=
WS_gethostbyname
(
aq
->
host_name
)))
{
size
=
aq
->
query
.
sbuflen
;
if
(
!
ws_hostent_32_to_16
(
he
,
aq
->
query
.
sbuf
,
&
size
))
fail
=
WSAENOBUFS
;
}
else
fail
=
GetLastError
();
return
finish_query
(
&
aq
->
query
,
MAKELPARAM
(
size
,
fail
));
}
static
DWORD
WINAPI
async_gethostbyaddr
(
LPVOID
arg
)
{
struct
async_query_gethostbyaddr
*
aq
=
arg
;
int
size
=
0
;
WORD
fail
=
0
;
struct
WS_hostent
*
he
;
if
((
he
=
WS_gethostbyaddr
(
aq
->
host_addr
,
aq
->
host_len
,
aq
->
host_type
)))
{
size
=
aq
->
query
.
sbuflen
;
if
(
!
ws_hostent_32_to_16
(
he
,
aq
->
query
.
sbuf
,
&
size
))
fail
=
WSAENOBUFS
;
}
else
fail
=
GetLastError
();
return
finish_query
(
&
aq
->
query
,
MAKELPARAM
(
size
,
fail
));
}
static
DWORD
WINAPI
async_getprotobyname
(
LPVOID
arg
)
{
struct
async_query_getprotobyname
*
aq
=
arg
;
int
size
=
0
;
WORD
fail
=
0
;
struct
WS_protoent
*
pe
;
if
((
pe
=
WS_getprotobyname
(
aq
->
proto_name
)))
{
size
=
aq
->
query
.
sbuflen
;
if
(
!
ws_protoent_32_to_16
(
pe
,
aq
->
query
.
sbuf
,
&
size
))
fail
=
WSAENOBUFS
;
}
else
fail
=
GetLastError
();
return
finish_query
(
&
aq
->
query
,
MAKELPARAM
(
size
,
fail
));
}
static
DWORD
WINAPI
async_getprotobynumber
(
LPVOID
arg
)
{
struct
async_query_getprotobynumber
*
aq
=
arg
;
int
size
=
0
;
WORD
fail
=
0
;
struct
WS_protoent
*
pe
;
if
((
pe
=
WS_getprotobynumber
(
aq
->
proto_number
)))
{
size
=
aq
->
query
.
sbuflen
;
if
(
!
ws_protoent_32_to_16
(
pe
,
aq
->
query
.
sbuf
,
&
size
))
fail
=
WSAENOBUFS
;
}
else
fail
=
GetLastError
();
return
finish_query
(
&
aq
->
query
,
MAKELPARAM
(
size
,
fail
));
}
static
DWORD
WINAPI
async_getservbyname
(
LPVOID
arg
)
{
struct
async_query_getservbyname
*
aq
=
arg
;
int
size
=
0
;
WORD
fail
=
0
;
struct
WS_servent
*
se
;
if
((
se
=
WS_getservbyname
(
aq
->
serv_name
,
aq
->
serv_proto
)))
{
size
=
aq
->
query
.
sbuflen
;
if
(
!
ws_servent_32_to_16
(
se
,
aq
->
query
.
sbuf
,
&
size
))
fail
=
WSAENOBUFS
;
}
else
fail
=
GetLastError
();
return
finish_query
(
&
aq
->
query
,
MAKELPARAM
(
size
,
fail
));
}
static
DWORD
WINAPI
async_getservbyport
(
LPVOID
arg
)
{
struct
async_query_getservbyport
*
aq
=
arg
;
int
size
=
0
;
WORD
fail
=
0
;
struct
WS_servent
*
se
;
if
((
se
=
WS_getservbyport
(
aq
->
serv_port
,
aq
->
serv_proto
)))
{
size
=
aq
->
query
.
sbuflen
;
if
(
!
ws_servent_32_to_16
(
se
,
aq
->
query
.
sbuf
,
&
size
))
fail
=
WSAENOBUFS
;
}
else
fail
=
GetLastError
();
return
finish_query
(
&
aq
->
query
,
MAKELPARAM
(
size
,
fail
));
}
/****************************************************************************
* The main async help function.
*
* It either starts a thread or just calls the function directly for platforms
* with no thread support. This relies on the fact that PostMessage() does
* not actually call the windowproc before the function returns.
*/
static
HANDLE16
run_query
(
HWND16
hWnd
,
UINT
uMsg
,
LPTHREAD_START_ROUTINE
func
,
struct
async_query_header
*
query
,
SEGPTR
sbuf
,
INT
sbuflen
)
{
static
LONG
next_handle
=
0xdead
;
HANDLE
thread
;
ULONG
handle
=
LOWORD
(
InterlockedIncrement
(
&
next_handle
));
/* avoid handle 0 */
while
(
!
handle
)
handle
=
LOWORD
(
InterlockedIncrement
(
&
next_handle
));
query
->
hWnd
=
HWND_32
(
hWnd
);
query
->
uMsg
=
uMsg
;
query
->
handle
=
handle
;
query
->
sbuf
=
sbuf
;
query
->
sbuflen
=
sbuflen
;
thread
=
CreateThread
(
NULL
,
0
,
func
,
query
,
0
,
NULL
);
if
(
!
thread
)
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
CloseHandle
(
thread
);
return
handle
;
}
/***********************************************************************
* accept (WINSOCK.1)
...
...
@@ -425,7 +640,7 @@ SEGPTR WINAPI gethostbyaddr16(const char *addr, INT16 len, INT16 type)
struct
WS_hostent
*
he
;
if
(
!
(
he
=
WS_gethostbyaddr
(
addr
,
len
,
type
)))
return
0
;
return
ws_hostent_32_to_16
(
he
);
return
ws_hostent_32_to_16
(
he
,
0
,
NULL
);
}
/***********************************************************************
...
...
@@ -436,7 +651,7 @@ SEGPTR WINAPI gethostbyname16(const char *name)
struct
WS_hostent
*
he
;
if
(
!
(
he
=
WS_gethostbyname
(
name
)))
return
0
;
return
ws_hostent_32_to_16
(
he
);
return
ws_hostent_32_to_16
(
he
,
0
,
NULL
);
}
/***********************************************************************
...
...
@@ -447,7 +662,7 @@ SEGPTR WINAPI getprotobyname16(const char *name)
struct
WS_protoent
*
pe
;
if
(
!
(
pe
=
WS_getprotobyname
(
name
)))
return
0
;
return
ws_protoent_32_to_16
(
pe
);
return
ws_protoent_32_to_16
(
pe
,
0
,
NULL
);
}
/***********************************************************************
...
...
@@ -458,7 +673,7 @@ SEGPTR WINAPI getprotobynumber16(INT16 number)
struct
WS_protoent
*
pe
;
if
(
!
(
pe
=
WS_getprotobynumber
(
number
)))
return
0
;
return
ws_protoent_32_to_16
(
pe
);
return
ws_protoent_32_to_16
(
pe
,
0
,
NULL
);
}
/***********************************************************************
...
...
@@ -469,7 +684,7 @@ SEGPTR WINAPI getservbyname16(const char *name, const char *proto)
struct
WS_servent
*
se
;
if
(
!
(
se
=
WS_getservbyname
(
name
,
proto
)))
return
0
;
return
ws_servent_32_to_16
(
se
);
return
ws_servent_32_to_16
(
se
,
0
,
NULL
);
}
/***********************************************************************
...
...
@@ -480,7 +695,7 @@ SEGPTR WINAPI getservbyport16(INT16 port, const char *proto)
struct
WS_servent
*
se
;
if
(
!
(
se
=
WS_getservbyport
(
port
,
proto
)))
return
0
;
return
ws_servent_32_to_16
(
se
);
return
ws_servent_32_to_16
(
se
,
0
,
NULL
);
}
/***********************************************************************
...
...
@@ -500,6 +715,144 @@ INT16 WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, LONG lEvent)
}
/***********************************************************************
* WSAAsyncGetHostByAddr (WINSOCK.102)
*/
HANDLE16
WINAPI
WSAAsyncGetHostByAddr16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
addr
,
INT16
len
,
INT16
type
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_gethostbyaddr
*
aq
;
TRACE
(
"hwnd %04x, msg %04x, addr %p[%i]
\n
"
,
hWnd
,
uMsg
,
addr
,
len
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
host_addr
=
(
char
*
)(
aq
+
1
);
aq
->
host_len
=
len
;
aq
->
host_type
=
type
;
memcpy
(
aq
->
host_addr
,
addr
,
len
);
return
run_query
(
hWnd
,
uMsg
,
async_gethostbyaddr
,
&
aq
->
query
,
sbuf
,
buflen
);
}
/***********************************************************************
* WSAAsyncGetHostByName (WINSOCK.103)
*/
HANDLE16
WINAPI
WSAAsyncGetHostByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_gethostbyname
*
aq
;
unsigned
int
len
=
strlen
(
name
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, host %s, buffer %i
\n
"
,
hWnd
,
uMsg
,
debugstr_a
(
name
),
buflen
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
host_name
=
(
char
*
)(
aq
+
1
);
strcpy
(
aq
->
host_name
,
name
);
return
run_query
(
hWnd
,
uMsg
,
async_gethostbyname
,
&
aq
->
query
,
sbuf
,
buflen
);
}
/***********************************************************************
* WSAAsyncGetProtoByNumber (WINSOCK.104)
*/
HANDLE16
WINAPI
WSAAsyncGetProtoByNumber16
(
HWND16
hWnd
,
UINT16
uMsg
,
INT16
number
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getprotobynumber
*
aq
;
TRACE
(
"hwnd %04x, msg %04x, num %i
\n
"
,
hWnd
,
uMsg
,
number
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
proto_number
=
number
;
return
run_query
(
hWnd
,
uMsg
,
async_getprotobynumber
,
&
aq
->
query
,
sbuf
,
buflen
);
}
/***********************************************************************
* WSAAsyncGetProtoByName (WINSOCK.105)
*/
HANDLE16
WINAPI
WSAAsyncGetProtoByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getprotobyname
*
aq
;
unsigned
int
len
=
strlen
(
name
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, proto %s, buffer %i
\n
"
,
hWnd
,
uMsg
,
debugstr_a
(
name
),
buflen
);
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
proto_name
=
(
char
*
)(
aq
+
1
);
strcpy
(
aq
->
proto_name
,
name
);
return
run_query
(
hWnd
,
uMsg
,
async_getprotobyname
,
&
aq
->
query
,
sbuf
,
buflen
);
}
/***********************************************************************
* WSAAsyncGetServByPort (WINSOCK.106)
*/
HANDLE16
WINAPI
WSAAsyncGetServByPort16
(
HWND16
hWnd
,
UINT16
uMsg
,
INT16
port
,
LPCSTR
proto
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getservbyport
*
aq
;
unsigned
int
len
=
strlen
(
proto
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, port %i, proto %s
\n
"
,
hWnd
,
uMsg
,
port
,
debugstr_a
(
proto
));
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
serv_proto
=
(
char
*
)(
aq
+
1
);
aq
->
serv_port
=
port
;
strcpy
(
aq
->
serv_proto
,
proto
);
return
run_query
(
hWnd
,
uMsg
,
async_getservbyport
,
&
aq
->
query
,
sbuf
,
buflen
);
}
/***********************************************************************
* WSAAsyncGetServByName (WINSOCK.107)
*/
HANDLE16
WINAPI
WSAAsyncGetServByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
LPCSTR
proto
,
SEGPTR
sbuf
,
INT16
buflen
)
{
struct
async_query_getservbyname
*
aq
;
unsigned
int
len1
=
strlen
(
name
)
+
1
;
unsigned
int
len2
=
strlen
(
proto
)
+
1
;
TRACE
(
"hwnd %04x, msg %04x, name %s, proto %s
\n
"
,
hWnd
,
uMsg
,
debugstr_a
(
name
),
debugstr_a
(
proto
));
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
aq
)
+
len1
+
len2
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
return
0
;
}
aq
->
serv_name
=
(
char
*
)(
aq
+
1
);
aq
->
serv_proto
=
aq
->
serv_name
+
len1
;
strcpy
(
aq
->
serv_name
,
name
);
strcpy
(
aq
->
serv_proto
,
proto
);
return
run_query
(
hWnd
,
uMsg
,
async_getservbyname
,
&
aq
->
query
,
sbuf
,
buflen
);
}
/***********************************************************************
* WSACancelAsyncRequest (WINSOCK.108)
*/
INT16
WINAPI
WSACancelAsyncRequest16
(
HANDLE16
hAsyncTaskHandle
)
{
FIXME
(
"(%04x),stub
\n
"
,
hAsyncTaskHandle
);
return
0
;
}
/***********************************************************************
* WSASetBlockingHook (WINSOCK.109)
*/
FARPROC16
WINAPI
WSASetBlockingHook16
(
FARPROC16
lpBlockFunc
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment