[SHELL32] CDrivesFolder: Implement the eject and disconnect menu items. CORE-13841
[reactos.git] / dll / win32 / rasadhlp / winsock.c
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 */
18 BOOL
19 WINAPI
20 WSAttemptAutodialAddr(IN CONST SOCKADDR FAR *Name,
21 IN INT NameLength)
22 {
23 PSOCKADDR_IN Ip = (PSOCKADDR_IN)Name;
24 PSOCKADDR_NB NetBios = (PSOCKADDR_NB)Name;
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,
41 NETBIOS_NAME_LENGTH);
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 */
56 BOOL
57 WINAPI
58 WSAttemptAutodialName(IN CONST LPWSAQUERYSETW Restrictions)
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;
72 WideCharToMultiByte(CP_ACP,
73 0,
74 Restrictions->lpszServiceInstanceName,
75 -1,
76 AutodialAddress.HostName,
77 INTERNET_MAX_PATH_LENGTH - 1,
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 */
90 WideCharToMultiByte(CP_ACP,
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 */
117 VOID
118 WINAPI
119 WSNoteSuccessfulHostentLookup(IN CONST CHAR FAR *Name,
120 IN CONST ULONG Address)
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 }