Beispiel #1
0
int
lws_plat_inet_pton(int af, const char *src, void *dst)
{
	WCHAR *buffer;
	DWORD bufferlen = (int)strlen(src) + 1;
	BOOL ok = FALSE;

	buffer = lws_malloc(bufferlen * 2, "inet_pton");
	if (!buffer) {
		lwsl_err("Out of memory\n");
		return -1;
	}

	if (MultiByteToWideChar(CP_ACP, 0, src, bufferlen, buffer, bufferlen) <= 0) {
		lwsl_err("Failed to convert multi byte to wide char\n");
		lws_free(buffer);
		return -1;
	}

	if (af == AF_INET) {
		struct sockaddr_in dstaddr;
		int dstaddrlen = sizeof(dstaddr);
		bzero(&dstaddr, sizeof(dstaddr));
		dstaddr.sin_family = AF_INET;

		if (!WSAStringToAddressW(buffer, af, 0, (struct sockaddr *) &dstaddr, &dstaddrlen)) {
			ok = TRUE;
			memcpy(dst, &dstaddr.sin_addr, sizeof(dstaddr.sin_addr));
		}
#ifdef LWS_WITH_IPV6
	} else if (af == AF_INET6) {
		struct sockaddr_in6 dstaddr;
		int dstaddrlen = sizeof(dstaddr);
		bzero(&dstaddr, sizeof(dstaddr));
		dstaddr.sin6_family = AF_INET6;

		if (!WSAStringToAddressW(buffer, af, 0, (struct sockaddr *) &dstaddr, &dstaddrlen)) {
			ok = TRUE;
			memcpy(dst, &dstaddr.sin6_addr, sizeof(dstaddr.sin6_addr));
		}
#endif
	} else
		lwsl_err("Unsupported type\n");

	if (!ok) {
		int rv = WSAGetLastError();
		lwsl_err("WSAAddressToString() : %d\n", rv);
	}

	lws_free(buffer);
	return ok ? 1 : -1;
}
Beispiel #2
0
static
VOID
EnumerateServerName(
    _In_ PWCHAR Interface,
    _In_ PWCHAR NameServer,
    _Inout_ PVOID Data)
{
    PIP_ADAPTER_DNS_SERVER_ADDRESS** Ptr = Data;
    PIP_ADAPTER_DNS_SERVER_ADDRESS ServerAddress = **Ptr;

    UNREFERENCED_PARAMETER(Interface);

    ServerAddress->Length = sizeof(IP_ADAPTER_DNS_SERVER_ADDRESS);
    ServerAddress->Address.lpSockaddr = (PVOID)(ServerAddress + 1);
    ServerAddress->Address.iSockaddrLength = sizeof(SOCKADDR);


    /* Get the address from the server name string */
    //FIXME: Only ipv4 for now...
    if (WSAStringToAddressW(
        NameServer,
        AF_INET,
        NULL,
        ServerAddress->Address.lpSockaddr,
        &ServerAddress->Address.iSockaddrLength))
    {
        /* Pass along, name conversion failed */
        ERR("%S is not a valid IP address\n", NameServer);
        return;
    }

    /* Go to next item */
    ServerAddress->Next = (PVOID)(ServerAddress->Address.lpSockaddr + 1);
    *Ptr = &ServerAddress->Next;
}