ReactOS 0.4.15-dev-7842-g558ab78
winsock.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Winsock 2 SPI
4 * FILE: lib/mswsock/lib/init.c
5 * PURPOSE: DLL Initialization
6 */
7
8#include "precomp.h"
9
10#include <winnls.h>
11#include <nsp_dns.h>
12
13/* FUNCTIONS *****************************************************************/
14
15/*
16 * @implemented
17 */
18BOOL
21 IN INT NameLength)
22{
25 AUTODIAL_ADDR AutodialAddress;
26
27 /* Check the family type */
28 switch (Name->sa_family)
29 {
30 case AF_INET:
31 /* Normal IPv4, set the Autodial Address Data */
32 AutodialAddress.Family = AutoDialIp;
33 AutodialAddress.Ip4Address = Ip->sin_addr;
34 break;
35
36 case AF_NETBIOS:
37 /* NetBIOS, set the Autodial Address Data*/
38 AutodialAddress.Family = AutoDialNetBios;
39 RtlCopyMemory(&AutodialAddress.NetBiosAddress,
40 NetBios->snb_name,
42 break;
43
44 default:
45 /* Unsupported family type */
46 return FALSE;
47 }
48
49 /* Call the public routine */
50 return AcsHlpAttemptConnection(&AutodialAddress);
51}
52
53/*
54 * @implemented
55 */
56BOOL
59{
60 AUTODIAL_ADDR AutodialAddress;
61 CHAR AnsiIp[17];
62 LPGUID Guid = Restrictions->lpServiceClassId;
63
64 /* Make sure we actually have a name */
65 if (!Restrictions->lpszServiceInstanceName) return FALSE;
66
67 /* Check if this is the Hostname GUID */
68 if (!memcmp(Guid, &HostnameGuid, sizeof(GUID)))
69 {
70 /* It is. Set up the Autodial Address Data */
71 AutodialAddress.Family = AutoDialIpHost;
73 0,
74 Restrictions->lpszServiceInstanceName,
75 -1,
76 AutodialAddress.HostName,
78 0,
79 0);
80
81 /* Call the public routine */
82 return AcsHlpAttemptConnection(&AutodialAddress);
83 }
84 else if (!memcmp(Guid, &AddressGuid, sizeof(GUID)))
85 {
86 /* It's actually the IP String GUID */
87 AutodialAddress.Family = AutoDialIp;
88
89 /* Convert the IP String to ANSI and then convert it to IP */
91 0,
92 Restrictions->lpszServiceInstanceName,
93 -1,
94 AnsiIp,
95 sizeof(AnsiIp) - 1,
96 0,
97 0);
98 _strlwr(AnsiIp);
99 AutodialAddress.Ip4Address.S_un.S_addr = inet_addr(AnsiIp);
100
101 /* Make sure the IP is valid */
102 if (AutodialAddress.Ip4Address.S_un.S_addr == -1) return FALSE;
103
104 /* Call the public routine */
105 return AcsHlpAttemptConnection(&AutodialAddress);
106 }
107 else
108 {
109 /* Unknown GUID type */
110 return FALSE;
111 }
112}
113
114/*
115 * @implemented
116 */
117VOID
118WINAPI
121{
122 AUTODIAL_ADDR AutodialAddress;
123 AUTODIAL_CONN AutodialConnection;
124
125 /* Make sure there actually is a name */
126 if (!(Name) || !strlen(Name)) return;
127
128 /* Setup the Address */
129 AutodialAddress.Family = AutoDialIpHost;
130 strcpy(AutodialAddress.HostName, Name);
131
132 /* Setup the new connection */
133 AutodialConnection.Family = ConnectionIp;
134 AutodialConnection.Ip4Address = Address;
135 AcsHlpNoteNewConnection(&AutodialAddress, &AutodialConnection);
136}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
BOOLEAN WINAPI AcsHlpAttemptConnection(IN PAUTODIAL_ADDR ConnectionAddress)
Definition: autodial.c:89
BOOLEAN WINAPI AcsHlpNoteNewConnection(IN PAUTODIAL_ADDR ConnectionAddress, IN PAUTODIAL_CONN Connection)
Definition: autodial.c:108
#define FALSE
Definition: types.h:117
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
#define FAR
Definition: zlib.h:34
@ ConnectionIp
Definition: precomp.h:48
@ AutoDialIpHost
Definition: precomp.h:42
@ AutoDialNetBios
Definition: precomp.h:41
@ AutoDialIp
Definition: precomp.h:39
#define AF_INET
Definition: tcpip.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define inet_addr(cp)
Definition: inet.h:98
const GUID DECLSPEC_SELECTANY HostnameGuid
Definition: nsp_dns.h:17
const GUID DECLSPEC_SELECTANY AddressGuid
Definition: nsp_dns.h:18
#define CONST
Definition: pedump.c:81
static WCHAR Address[46]
Definition: ping.c:68
_CRTIMP char *__cdecl _strlwr(_Inout_z_ char *_String)
static LPWSAQUERYSETW
Definition: sock.c:90
CHAR HostName[INTERNET_MAX_PATH_LENGTH]
Definition: precomp.h:61
IN_ADDR Ip4Address
Definition: precomp.h:58
CHAR NetBiosAddress[NETBIOS_NAME_LENGTH]
Definition: precomp.h:60
AUTODIAL_FAMILY Family
Definition: precomp.h:55
ULONG Ip4Address
Definition: precomp.h:71
CONNECTION_FAMILY Family
Definition: precomp.h:67
u_long S_addr
Definition: tcpip.h:131
union in_addr::@1019 S_un
struct in_addr sin_addr
Definition: winsock.h:512
char snb_name[NETBIOS_NAME_LENGTH]
Definition: wsnetbs.h:14
int32_t INT
Definition: typedefs.h:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:762
#define WINAPI
Definition: msvc.h:6
#define INTERNET_MAX_PATH_LENGTH
Definition: wininet.h:49
BOOL WINAPI WSAttemptAutodialName(IN CONST LPWSAQUERYSETW Restrictions)
Definition: winsock.c:58
BOOL WINAPI WSAttemptAutodialAddr(IN CONST SOCKADDR FAR *Name, IN INT NameLength)
Definition: winsock.c:20
VOID WINAPI WSNoteSuccessfulHostentLookup(IN CONST CHAR FAR *Name, IN CONST ULONG Address)
Definition: winsock.c:119
#define AF_NETBIOS
Definition: winsock.h:363
struct sockaddr_in * PSOCKADDR_IN
Definition: winsock.h:488
struct sockaddr_nb * PSOCKADDR_NB
#define NETBIOS_NAME_LENGTH
Definition: wsnetbs.h:4
char CHAR
Definition: xmlstorage.h:175