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 } 137