Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
5e114a86
Commit
5e114a86
authored
Sep 13, 2004
by
Andreas Rosenberg
Committed by
Alexandre Julliard
Sep 13, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implementation of WSAStringToAddress(A/W), WSAHtonl, WSAHtons.
parent
cdcdbe54
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
152 additions
and
11 deletions
+152
-11
socket.c
dlls/winsock/socket.c
+148
-7
ws2_32.spec
dlls/winsock/ws2_32.spec
+1
-1
winsock2.h
include/winsock2.h
+3
-3
No files found.
dlls/winsock/socket.c
View file @
5e114a86
...
...
@@ -118,6 +118,7 @@
#include "wingdi.h"
#include "winuser.h"
#include "winerror.h"
#include "winnls.h"
#include "winsock2.h"
#include "mswsock.h"
#include "ws2tcpip.h"
...
...
@@ -1665,20 +1666,39 @@ u_short WINAPI WS_htons(u_short hostshort)
/***********************************************************************
* WSAHtonl (WS2_32.46)
* From MSDN decription of error codes, this function should also
* check if WinSock has been initialized and the socket is a valid
* socket. But why? This function only translates a host byte order
* u_long into a network byte order u_long...
*/
int
WINAPI
WSAHtonl
(
SOCKET
s
,
u_long
hostlong
,
u_long
*
lpnetlong
)
{
FIXME
(
"stub.
\n
"
);
return
INVALID_SOCKET
;
if
(
lpnetlong
)
{
*
lpnetlong
=
htonl
(
hostlong
);
return
0
;
}
WSASetLastError
(
WSAEFAULT
);
return
SOCKET_ERROR
;
}
/***********************************************************************
* WSAHtons (WS2_32.47)
* From MSDN decription of error codes, this function should also
* check if WinSock has been initialized and the socket is a valid
* socket. But why? This function only translates a host byte order
* u_short into a network byte order u_short...
*/
int
WINAPI
WSAHtons
(
SOCKET
s
,
u_short
hostshort
,
u_short
*
lpnetshort
)
{
FIXME
(
"stub.
\n
"
);
return
INVALID_SOCKET
;
if
(
lpnetshort
)
{
*
lpnetshort
=
htons
(
hostshort
);
return
0
;
}
WSASetLastError
(
WSAEFAULT
);
return
SOCKET_ERROR
;
}
...
...
@@ -3564,12 +3584,133 @@ int WINAPI WSARemoveServiceClass(LPGUID info)
*/
INT
WINAPI
WSAStringToAddressA
(
LPSTR
AddressString
,
INT
AddressFamily
,
LPWSAPROTOCOL_INFOA
lpProtocolInfo
,
LPWSAPROTOCOL_INFOA
lpProtocolInfo
,
LPSOCKADDR
lpAddress
,
LPINT
lpAddressLength
)
{
FIXME
(
"(%s, %x, %p, %p, %p) Stub!
\n
"
,
AddressString
,
AddressFamily
,
lpProtocolInfo
,
lpAddress
,
lpAddressLength
);
return
0
;
INT
res
=
0
;
LONG
inetaddr
;
LPSTR
workBuffer
=
NULL
,
ptrPort
;
if
(
AddressString
)
{
workBuffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
strlen
(
AddressString
)
+
1
);
if
(
workBuffer
)
{
strcpy
(
workBuffer
,
AddressString
);
switch
(
AddressFamily
)
{
case
AF_INET
:
/* caller wants to know the size of the socket buffer */
if
(
*
lpAddressLength
<
sizeof
(
SOCKADDR_IN
))
{
*
lpAddressLength
=
sizeof
(
SOCKADDR_IN
);
res
=
WSAEFAULT
;
}
else
{
/* caller wants to translate an AdressString into a SOCKADDR */
if
(
lpAddress
)
{
memset
(
lpAddress
,
0
,
sizeof
(
SOCKADDR_IN
));
((
LPSOCKADDR_IN
)
lpAddress
)
->
sin_family
=
AF_INET
;
ptrPort
=
strchr
(
workBuffer
,
':'
);
if
(
ptrPort
)
{
((
LPSOCKADDR_IN
)
lpAddress
)
->
sin_port
=
(
u_short
)
atoi
(
ptrPort
+
1
);
*
ptrPort
=
'\0'
;
}
else
((
LPSOCKADDR_IN
)
lpAddress
)
->
sin_port
=
0
;
inetaddr
=
inet_addr
(
workBuffer
);
if
(
inetaddr
!=
INADDR_NONE
)
{
((
LPSOCKADDR_IN
)
lpAddress
)
->
sin_addr
.
WS_s_addr
=
inetaddr
;
res
=
0
;
}
else
res
=
WSAEINVAL
;
}
}
if
(
lpProtocolInfo
)
FIXME
(
"(%s, %x, %p, %p, %p) - ProtocolInfo not implemented!
\n
"
,
AddressString
,
AddressFamily
,
lpProtocolInfo
,
lpAddress
,
lpAddressLength
);
break
;
default:
FIXME
(
"(%s, %x, %p, %p, %p) - AddressFamiliy not implemented!
\n
"
,
AddressString
,
AddressFamily
,
lpProtocolInfo
,
lpAddress
,
lpAddressLength
);
}
HeapFree
(
GetProcessHeap
(),
0
,
workBuffer
);
}
else
res
=
WSA_NOT_ENOUGH_MEMORY
;
}
else
res
=
WSAEINVAL
;
if
(
!
res
)
return
0
;
WSASetLastError
(
res
);
return
SOCKET_ERROR
;
}
/***********************************************************************
* WSAStringToAddressW (WS2_32.81)
*
* Does anybody know if this functions allows to use hebrew/arabic/chinese... digits?
* If this should be the case, it would be required to map these digits
* to Unicode digits (0-9) using FoldString first.
*/
INT
WINAPI
WSAStringToAddressW
(
LPWSTR
AddressString
,
INT
AddressFamily
,
LPWSAPROTOCOL_INFOW
lpProtocolInfo
,
LPSOCKADDR
lpAddress
,
LPINT
lpAddressLength
)
{
INT
sBuffer
,
res
=
0
;
LPSTR
workBuffer
=
NULL
;
WSAPROTOCOL_INFOA
infoA
;
LPWSAPROTOCOL_INFOA
lpProtoInfoA
=
NULL
;
/* if ProtocolInfo is available - convert to ANSI variant */
if
(
lpProtocolInfo
)
{
lpProtoInfoA
=
&
infoA
;
memcpy
(
lpProtoInfoA
,
lpProtocolInfo
,
FIELD_OFFSET
(
WSAPROTOCOL_INFOA
,
szProtocol
)
);
if
(
!
WideCharToMultiByte
(
CP_ACP
,
0
,
lpProtocolInfo
->
szProtocol
,
-
1
,
lpProtoInfoA
->
szProtocol
,
WSAPROTOCOL_LEN
+
1
,
NULL
,
NULL
))
{
WSASetLastError
(
WSAEINVAL
);
return
SOCKET_ERROR
;
}
}
if
(
AddressString
)
{
/* Translate AddressString to ANSI code page - assumes that only
standard digits 0-9 are used with this API call */
sBuffer
=
WideCharToMultiByte
(
CP_ACP
,
0
,
AddressString
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
workBuffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sBuffer
);
if
(
workBuffer
)
{
WideCharToMultiByte
(
CP_ACP
,
0
,
AddressString
,
-
1
,
workBuffer
,
sBuffer
,
NULL
,
NULL
);
res
=
WSAStringToAddressA
(
workBuffer
,
AddressFamily
,
lpProtoInfoA
,
lpAddress
,
lpAddressLength
);
HeapFree
(
GetProcessHeap
(),
0
,
workBuffer
);
return
res
;
}
else
res
=
WSA_NOT_ENOUGH_MEMORY
;
}
else
res
=
WSAEINVAL
;
WSASetLastError
(
res
);
return
SOCKET_ERROR
;
}
/***********************************************************************
...
...
dlls/winsock/ws2_32.spec
View file @
5e114a86
...
...
@@ -82,7 +82,7 @@
78 stdcall WSASocketA(long long long ptr long long)
79 stub WSASocketW
80 stdcall WSAStringToAddressA(str long ptr ptr ptr)
81 st
ub WSAStringToAddressW
81 st
dcall WSAStringToAddressW(wstr long ptr ptr ptr)
82 stdcall WSAWaitForMultipleEvents(long ptr long long long) kernel32.WaitForMultipleObjectsEx
83 stdcall WSCDeinstallProvider(ptr ptr)
84 stub WSCEnableNSProvider
...
...
include/winsock2.h
View file @
5e114a86
...
...
@@ -558,10 +558,10 @@ BOOL WINAPI WSASetEvent(WSAEVENT);
/* WSASetServiceW */
SOCKET
WINAPI
WSASocketA
(
int
,
int
,
int
,
LPWSAPROTOCOL_INFOA
,
GROUP
,
DWORD
);
SOCKET
WINAPI
WSASocketW
(
int
,
int
,
int
,
LPWSAPROTOCOL_INFOW
,
GROUP
,
DWORD
);
#define WSASocket WINELIB_NAME_AW(WSASocket)
INT
WINAPI
WSAStringToAddressA
(
LPSTR
,
INT
,
LPWSAPROTOCOL_INFOA
,
LPSOCKADDR
,
LPINT
);
INT
WINAPI
WSAStringToAddressW
(
LPSTR
,
INT
,
LPWSAPROTOCOL_INFOA
,
LPSOCKADDR
,
LPINT
);
#define WSASocket WINELIB_NAME_AW(WSASocket)
#define WSAStringToAddress WINELIB_NAME_AW(WSAStringToAddress)
INT
WINAPI
WSAStringToAddressW
(
LPWSTR
,
INT
,
LPWSAPROTOCOL_INFOW
,
LPSOCKADDR
,
LPINT
);
#define WSAStringToAddress WINELIB_NAME_AW(WSAStringToAddress)
DWORD
WINAPI
WSAWaitForMultipleEvents
(
DWORD
,
const
WSAEVENT
*
,
BOOL
,
DWORD
,
BOOL
);
#endif
/* WS_API_PROTOTYPES */
...
...
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