ReactOS  0.4.13-dev-259-g5ca9c9c
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  */
18 BOOL
19 WINAPI
21  IN INT NameLength)
22 {
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,
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
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  */
117 VOID
118 WINAPI
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 }
#define IN
Definition: typedefs.h:38
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define inet_addr(cp)
Definition: inet.h:98
#define WideCharToMultiByte
Definition: compat.h:101
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define CP_ACP
Definition: compat.h:99
char CHAR
Definition: xmlstorage.h:175
IN_ADDR Ip4Address
Definition: precomp.h:58
static LPWSAQUERYSETW
Definition: sock.c:91
VOID WINAPI WSNoteSuccessfulHostentLookup(IN CONST CHAR FAR *Name, IN CONST ULONG Address)
Definition: winsock.c:119
ULONG Ip4Address
Definition: precomp.h:71
#define AF_NETBIOS
Definition: winsock.h:363
int32_t INT
Definition: typedefs.h:56
BOOLEAN WINAPI AcsHlpAttemptConnection(IN PAUTODIAL_ADDR ConnectionAddress)
Definition: autodial.c:89
CHAR HostName[INTERNET_MAX_PATH_LENGTH]
Definition: precomp.h:61
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI WSAttemptAutodialName(IN CONST LPWSAQUERYSETW Restrictions)
Definition: winsock.c:58
#define FAR
Definition: guiddef.h:36
static GUID * Guid
Definition: apphelp.c:93
static WCHAR Address[46]
Definition: ping.c:68
BOOL WINAPI WSAttemptAutodialAddr(IN CONST SOCKADDR FAR *Name, IN INT NameLength)
Definition: winsock.c:20
BOOLEAN WINAPI AcsHlpNoteNewConnection(IN PAUTODIAL_ADDR ConnectionAddress, IN PAUTODIAL_CONN Connection)
Definition: autodial.c:108
struct sockaddr_nb * PSOCKADDR_NB
#define WINAPI
Definition: msvc.h:8
const GUID DECLSPEC_SELECTANY AddressGuid
Definition: nsp_dns.h:18
AUTODIAL_FAMILY Family
Definition: precomp.h:55
#define NETBIOS_NAME_LENGTH
Definition: wsnetbs.h:4
u_long S_addr
Definition: tcpip.h:131
struct in_addr sin_addr
Definition: winsock.h:512
union in_addr::@981 S_un
#define INTERNET_MAX_PATH_LENGTH
Definition: wininet.h:49
_CRTIMP char *__cdecl _strlwr(_Inout_z_ char *_String)
struct sockaddr_in * PSOCKADDR_IN
Definition: winsock.h:488
CONNECTION_FAMILY Family
Definition: precomp.h:67
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
unsigned int ULONG
Definition: retypes.h:1
#define AF_INET
Definition: tcpip.h:117
CHAR NetBiosAddress[NETBIOS_NAME_LENGTH]
Definition: precomp.h:60
const GUID DECLSPEC_SELECTANY HostnameGuid
Definition: nsp_dns.h:17
#define CONST
Definition: pedump.c:81
char snb_name[NETBIOS_NAME_LENGTH]
Definition: wsnetbs.h:14