Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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
wine
wine-cw
Commits
5963d7f0
Commit
5963d7f0
authored
Mar 18, 2014
by
Erich E. Hoover
Committed by
Alexandre Julliard
Mar 28, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ws2_32: Ask the server to process unsupported WSAIoctl operations.
parent
598c5816
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
7 deletions
+53
-7
socket.c
dlls/ws2_32/socket.c
+53
-7
No files found.
dlls/ws2_32/socket.c
View file @
5963d7f0
...
...
@@ -3673,6 +3673,40 @@ static const char *debugstr_wsaioctl(DWORD ioctl)
(
USHORT
)(
ioctl
&
0xffff
));
}
/* do an ioctl call through the server */
static
DWORD
server_ioctl_sock
(
SOCKET
s
,
DWORD
code
,
LPVOID
in_buff
,
DWORD
in_size
,
LPVOID
out_buff
,
DWORD
out_size
,
LPDWORD
ret_size
,
LPWSAOVERLAPPED
overlapped
,
LPWSAOVERLAPPED_COMPLETION_ROUTINE
completion
)
{
HANDLE
event
=
overlapped
?
overlapped
->
hEvent
:
0
;
HANDLE
handle
=
SOCKET2HANDLE
(
s
);
struct
ws2_async
*
wsa
;
NTSTATUS
status
;
PIO_STATUS_BLOCK
io
;
if
(
!
(
wsa
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
sizeof
(
*
wsa
)
)))
return
WSA_NOT_ENOUGH_MEMORY
;
wsa
->
hSocket
=
handle
;
wsa
->
user_overlapped
=
overlapped
;
wsa
->
completion_func
=
completion
;
io
=
(
overlapped
?
(
PIO_STATUS_BLOCK
)
overlapped
:
&
wsa
->
local_iosb
);
status
=
NtDeviceIoControlFile
(
handle
,
event
,
(
PIO_APC_ROUTINE
)
ws2_async_apc
,
wsa
,
io
,
code
,
in_buff
,
in_size
,
out_buff
,
out_size
);
if
(
status
==
STATUS_NOT_SUPPORTED
)
{
FIXME
(
"Unsupported ioctl %x (device=%x access=%x func=%x method=%x)
\n
"
,
code
,
code
>>
16
,
(
code
>>
14
)
&
3
,
(
code
>>
2
)
&
0xfff
,
code
&
3
);
}
else
if
(
status
==
STATUS_SUCCESS
)
*
ret_size
=
io
->
Information
;
/* "Information" is the size written to the output buffer */
if
(
status
!=
STATUS_PENDING
)
RtlFreeHeap
(
GetProcessHeap
(),
0
,
wsa
);
return
NtStatusToWSAError
(
status
);
}
/**********************************************************************
* WSAIoctl (WS2_32.50)
*
...
...
@@ -3865,12 +3899,6 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
break
;
}
case
WS_SIO_ADDRESS_LIST_CHANGE
:
FIXME
(
"-> SIO_ADDRESS_LIST_CHANGE request: stub
\n
"
);
/* FIXME: error and return code depend on whether socket was created
* with WSA_FLAG_OVERLAPPED, but there is no easy way to get this */
break
;
case
WS_SIO_ADDRESS_LIST_QUERY
:
{
DWORD
size
;
...
...
@@ -4106,11 +4134,29 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
WSASetLastError
(
WSAEOPNOTSUPP
);
return
SOCKET_ERROR
;
default:
FIXME
(
"unsupported WS_IOCTL cmd (%s)
\n
"
,
debugstr_wsaioctl
(
code
));
status
=
WSAEOPNOTSUPP
;
break
;
}
if
(
status
==
WSAEOPNOTSUPP
)
{
status
=
server_ioctl_sock
(
s
,
code
,
in_buff
,
in_size
,
out_buff
,
out_size
,
&
total
,
overlapped
,
completion
);
if
(
status
!=
WSAEOPNOTSUPP
)
{
if
(
status
==
0
||
status
==
WSA_IO_PENDING
)
TRACE
(
"-> %s request
\n
"
,
debugstr_wsaioctl
(
code
));
else
ERR
(
"-> %s request failed with status 0x%x
\n
"
,
debugstr_wsaioctl
(
code
),
status
);
/* overlapped and completion operations will be handled by the server */
completion
=
NULL
;
overlapped
=
NULL
;
}
else
FIXME
(
"unsupported WS_IOCTL cmd (%s)
\n
"
,
debugstr_wsaioctl
(
code
));
}
if
(
completion
)
{
FIXME
(
"completion routine %p not supported
\n
"
,
completion
);
...
...
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