コード例 #1
0
ファイル: dnssd_clientshim.c プロジェクト: micwik/ArnLib
static int DomainEndsInDot(const char *dom)
    {
    while (dom[0] && dom[1])
        {
        if (dom[0] == '\\') // advance past escaped byte sequence
            {
            if (mDNSIsDigit(dom[1]) && mDNSIsDigit(dom[2]) && mDNSIsDigit(dom[3]))
                dom += 4;			// If "\ddd"    then skip four
            else dom += 2;			// else if "\x" then skip two
            }
        else dom++;					// else goto next character
        }
    return (dom[0] == '.');
    }
コード例 #2
0
mDNSlocal void handleLNTGetExternalAddressResponse(tcpLNTInfo *tcpInfo)
	{
	mDNS       *m = tcpInfo->m;
	mDNSu16     err = NATErr_None;
	mDNSv4Addr  ExtAddr;
	mDNSu8     *ptr = (mDNSu8*)tcpInfo->Reply;
	mDNSu8     *end = (mDNSu8*)tcpInfo->Reply + tcpInfo->nread;
	mDNSu8     *addrend;
	static char tagname[20] = "NewExternalIPAddress";		// Array NOT including a terminating nul

//	LogInfo("handleLNTGetExternalAddressResponse: %s", ptr);

	mDNSs16 http_result = ParseHTTPResponseCode(&ptr, end); // Note: modifies ptr
	if (http_result == HTTPCode_404) LNT_ClearState(m);
	if (http_result != HTTPCode_200)
		{
		mDNSASLLog((uuid_t *)&m->asl_uuid, "natt.legacy.AddressRequest", "noop", "HTTP Result", "HTTP code: %d", http_result);
		return;
		}

	
	while (ptr < end && strncasecmp((char*)ptr, tagname, sizeof(tagname))) ptr++;
	ptr += sizeof(tagname);						// Skip over "NewExternalIPAddress"
	while (ptr < end && *ptr != '>') ptr++;
	ptr += 1;									// Skip over ">"
	// Find the end of the address and terminate the string so inet_pton() can convert it
	addrend = ptr;
	while (addrend < end && (mDNSIsDigit(*addrend) || *addrend == '.')) addrend++;
	if (addrend >= end) return;
	*addrend = 0;

	if (inet_pton(AF_INET, (char*)ptr, &ExtAddr) <= 0)
		{
		mDNSASLLog((uuid_t *)&m->asl_uuid, "natt.legacy.AddressRequest", "noop", "inet_pton", "");
		LogMsg("handleLNTGetExternalAddressResponse: Router returned bad address %s", ptr);
		err = NATErr_NetFail;
		ExtAddr = zerov4Addr;
		}
	if (!err) LogInfo("handleLNTGetExternalAddressResponse: External IP address is %.4a", &ExtAddr);

	natTraversalHandleAddressReply(m, err, ExtAddr);
	}