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
2da98052
Commit
2da98052
authored
Jul 13, 2008
by
Jon Griffiths
Committed by
Alexandre Julliard
Jul 16, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mswsock: Implement 3 functions by calling through SIO_GET_EXTENSION_FUNCTION_POINTER.
parent
8e86162b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
100 additions
and
68 deletions
+100
-68
mswsock.c
dlls/mswsock/mswsock.c
+100
-68
No files found.
dlls/mswsock/mswsock.c
View file @
2da98052
...
...
@@ -31,95 +31,127 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
mswsock
);
static
LPFN_ACCEPTEX
acceptex_fn
;
static
LPFN_GETACCEPTEXSOCKADDRS
acceptexsockaddrs_fn
;
static
LPFN_TRANSMITFILE
transmitfile_fn
;
static
BOOL
initialised
;
/* Get pointers to the ws2_32 implementations.
* NOTE: This assumes that ws2_32 contains only one implementation
* of these functions, i.e. that you cannot get different functions
* back by passing another socket in. If that ever changes, we'll need
* to think about associating the functions with the socket and
* exposing that information to this dll somehow.
*/
static
void
get_fn
(
SOCKET
s
,
GUID
*
guid
,
FARPROC
*
fn
)
{
FARPROC
func
;
DWORD
len
;
if
(
!
WSAIoctl
(
s
,
SIO_GET_EXTENSION_FUNCTION_POINTER
,
guid
,
sizeof
(
*
guid
),
&
func
,
sizeof
(
func
),
&
len
,
NULL
,
NULL
))
*
fn
=
func
;
}
static
void
get_fn_pointers
(
SOCKET
s
)
{
GUID
acceptex_guid
=
WSAID_ACCEPTEX
;
GUID
acceptexsockaddrs_guid
=
WSAID_GETACCEPTEXSOCKADDRS
;
GUID
transmitfile_guid
=
WSAID_TRANSMITFILE
;
get_fn
(
s
,
&
acceptex_guid
,
(
FARPROC
*
)
&
acceptex_fn
);
get_fn
(
s
,
&
acceptexsockaddrs_guid
,
(
FARPROC
*
)
&
acceptexsockaddrs_fn
);
get_fn
(
s
,
&
transmitfile_guid
,
(
FARPROC
*
)
&
transmitfile_fn
);
initialised
=
TRUE
;
}
/***********************************************************************
* AcceptEx (MSWSOCK.@)
*
* This function is used to accept a new connection, get the local and remote
* address, and receive the initial block of data sent by the client.
* Accept a new connection, retrieving the connected addresses and initial data.
*
* TODO
* This function is currently implemented as a stub.
* listener [I] Listening socket
* acceptor [I] Socket to accept on
* dest [O] Destination for inital data
* dest_len [I] Size of dest in bytes
* local_addr_len [I] Number of bytes reserved in dest for local addrress
* rem_addr_len [I] Number of bytes reserved in dest for remote addrress
* received [O] Destination for number of bytes of initial data
* overlapped [I] For asynchronous execution
*
* RETURNS
* Success: TRUE
* Failure: FALSE. Use WSAGetLastError() for details of the error.
*/
BOOL
WINAPI
AcceptEx
(
SOCKET
sListenSocket
,
/* [in] Descriptor identifying a socket that
has already been called with the listen
function */
SOCKET
sAcceptSocket
,
/* [in] Descriptor identifying a socket on
which to accept an incoming connection */
PVOID
lpOutputBuffer
,
/* [in] Pointer to a buffer */
DWORD
dwReceiveDataLength
,
/* [in] Number of bytes in lpOutputBuffer
that will be used for actual receive data
at the beginning of the buffer */
DWORD
dwLocalAddressLength
,
/* [in] Number of bytes reserved for the
local address information */
DWORD
dwRemoteAddressLength
,
/* [in] Number of bytes reserved for the
remote address information */
LPDWORD
lpdwBytesReceived
,
/* [out] Pointer to a DWORD that receives
the count of bytes received */
LPOVERLAPPED
lpOverlapped
)
/* [in] Specify in order to achieve an
overlapped (asynchronous) I/O
operation */
BOOL
WINAPI
AcceptEx
(
SOCKET
listener
,
SOCKET
acceptor
,
PVOID
dest
,
DWORD
dest_len
,
DWORD
local_addr_len
,
DWORD
rem_addr_len
,
LPDWORD
received
,
LPOVERLAPPED
overlapped
)
{
FIXME
(
"(listen=%ld, accept=%ld, %p, %d, %d, %d, %p, %p), not implemented
\n
"
,
sListenSocket
,
sAcceptSocket
,
lpOutputBuffer
,
dwReceiveDataLength
,
dwLocalAddressLength
,
dwRemoteAddressLength
,
lpdwBytesReceived
,
lpOverlapped
);
return
FALSE
;
if
(
!
initialised
)
get_fn_pointers
(
acceptor
);
if
(
!
acceptex_fn
)
return
FALSE
;
return
acceptex_fn
(
listener
,
acceptor
,
dest
,
dest_len
,
local_addr_len
,
rem_addr_len
,
received
,
overlapped
);
}
/***********************************************************************
* GetAcceptExSockaddrs (MSWSOCK.@)
*
* Get infomation about an accepted socket.
*
* data [O] Destination for the first block of data from AcceptEx()
* data_len [I] length of data in bytes
* local_len [I] Bytes reserved for local addrinfo
* rem_len [I] Bytes reserved for remote addrinfo
* local_addr [O] Destination for local sockaddr
* local_addr_len [I] Size of local_addr
* rem_addr [O] Destination for remote sockaddr
* rem_addr_len [I] Size of rem_addr
*
* RETURNS
* Nothing.
*/
VOID
WINAPI
GetAcceptExSockaddrs
(
PVOID
lpOutputBuffer
,
/* [in] Pointer to a buffer */
DWORD
dwReceiveDataLength
,
/* [in] Number of bytes in the buffer used
for receiving the first data */
DWORD
dwLocalAddressLength
,
/* [in] Number of bytes reserved for the
local address information */
DWORD
dwRemoteAddressLength
,
/* [in] Number of bytes reserved for the
remote address information */
struct
sockaddr
**
LocalSockaddr
,
/* [out] Pointer to the sockaddr
structure that receives the local
address of the connection */
LPINT
LocalSockaddrLength
,
/* [out] Size in bytes of the local
address */
struct
sockaddr
**
RemoteSockaddr
,
/* [out] Pointer to the sockaddr
structure that receives the remote
address of the connection */
LPINT
RemoteSockaddrLength
)
/* [out] Size in bytes of the remote address */
VOID
WINAPI
GetAcceptExSockaddrs
(
PVOID
data
,
DWORD
data_len
,
DWORD
local_len
,
DWORD
rem_len
,
struct
sockaddr
**
local_addr
,
LPINT
local_addr_len
,
struct
sockaddr
**
rem_addr
,
LPINT
rem_addr_len
)
{
FIXME
(
"not implemented
\n
"
);
if
(
acceptexsockaddrs_fn
)
acceptexsockaddrs_fn
(
data
,
data_len
,
local_len
,
rem_len
,
local_addr
,
local_addr_len
,
rem_addr
,
rem_addr_len
);
}
/***********************************************************************
* TransmitFile (MSWSOCK.@)
*
* This function is used to transmit a file over socket.
* Transmit a file over a socket.
*
* PARAMS
* s [I] Handle to a connected socket
* file [I] Opened file handle for file to send
* total_len [I] Total number of file bytes to send
* chunk_len [I] Chunk size to send file in (0=default)
* overlapped [I] For asynchronous operation
* buffers [I] Head/tail data, or NULL if none
* flags [I] TF_ Flags from mswsock.h
*
* TODO
* This function is currently implemented as a stub.
* RETURNS
* Success: TRUE
* Failure: FALSE. Use WSAGetLastError() for details of the error.
*/
BOOL
WINAPI
TransmitFile
(
SOCKET
hSocket
,
/* [in] Handle to a connected socket */
HANDLE
hFile
,
/* [in] Handle to the open file that should be
transmitted */
DWORD
nNumberOfBytesToWrite
,
/* [in] Number of file bytes to
transmit */
DWORD
nNumberOfBytesPerSend
,
/* [in] Size in bytes of each block of
data sent in each send operation */
LPOVERLAPPED
lpOverlapped
,
/* [in] Specify in order to achieve an
overlapped (asynchronous) I/O
operation */
LPTRANSMIT_FILE_BUFFERS
lpTransmitBuffers
,
/* [in] Contains pointers to data to send before and after
the file data is sent */
DWORD
dwFlags
)
/* [in] Flags */
BOOL
WINAPI
TransmitFile
(
SOCKET
s
,
HANDLE
file
,
DWORD
total_len
,
DWORD
chunk_len
,
LPOVERLAPPED
overlapped
,
LPTRANSMIT_FILE_BUFFERS
buffers
,
DWORD
flags
)
{
FIXME
(
"not implemented
\n
"
);
if
(
!
initialised
)
get_fn_pointers
(
s
);
if
(
!
transmitfile_fn
)
return
FALSE
;
return
FALSE
;
return
transmitfile_fn
(
s
,
file
,
total_len
,
chunk_len
,
overlapped
,
buffers
,
flags
)
;
}
/***********************************************************************
...
...
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