BOOL FMediaContainer::DownloadAdpoints(vidtype videoID) { CAtlHttpClient Client; FString AdRequest; AdRequest.Format("/guide/ads.php?videoID=%d", videoID); FString pszUrl = g_AppSettings.ChannelGuideUrl(AdRequest); CAtlNavigateData Data; Data.SetReadStatusCallback(mCallback, (DWORD_PTR)this); Data.dwTimeout = 15000; //15 seconds good enough ? if (Client.Navigate(pszUrl, &Data) && Client.GetStatus() != ATL_INVALID_STATUS) { if (Client.GetStatus() == 200) // 200 = successful HTTP transaction { DWORD size = Client.GetBodyLength(); if (size > 0) { CAutoPtr<char> Buffer (new char[size + 1]); memcpy(Buffer.m_p, Client.GetBody(), size); FIniConfig aConf; if (aConf.LoadFromBuffer(Buffer, size)) { if (m_CurVideoID == videoID) return m_AdManager->LoadAds(aConf, TRUE); } } } } return FALSE; }
BOOL DomainInfo::UpdateDNS(const TCHAR* addr, EventLog* plog) { CAtlHttpClient client; BOOL rval = FALSE; CAtlNavigateData navData; navData.SetMethod(ATL_HTTP_METHOD_GET); if (httpTimeout > 0) navData.SetSocketTimeout(httpTimeout); // set auth CBasicAuthObject auth; client.AddAuthObj(_T("basic"), &auth, this); // proxy if (proxy.length() > 0) { client.SetProxy(proxy.c_str(), (short) proxyPort); } // setup headers tstring headers; if (navData.GetExtraHeaders() != NULL) headers += navData.GetExtraHeaders(); headers += _T("Connection: close"); headers += _T("\r\n"); navData.SetExtraHeaders(headers.c_str()); // setup url TCHAR item[256]; DWORD itemLen; tstring cUrl = easydnsurl; if (easydnsurl.length() == 0) cUrl = _T("http://members.easydns.com/dyn/dyndns.php"); // hostname cUrl += _T("?hostname="); if (AtlEscapeUrl(hostname.c_str(), item, &itemLen, 256) == FALSE) { plog->LogEvent(EVENTLOG_ERROR_TYPE, "hostname is too long"); return FALSE; } cUrl += item; // tld if (tld.length() > 0) { cUrl += _T("&tld="); if (AtlEscapeUrl(tld.c_str(), item, &itemLen, 256) == FALSE) { plog->LogEvent(EVENTLOG_ERROR_TYPE, "tld is too long"); return FALSE; } cUrl += item; } // myip cUrl += _T("&myip="); tstring tmp = myip; if (tmp.length() == 0) tmp = addr; if (AtlEscapeUrl(tmp.c_str(), item, &itemLen, 256) == FALSE) { plog->LogEvent(EVENTLOG_ERROR_TYPE, "myip is too long"); return FALSE; } cUrl += item; // mx if (mx.length() > 0) { cUrl += _T("&mx="); if (AtlEscapeUrl(mx.c_str(), item, &itemLen, 256) == FALSE) { plog->LogEvent(EVENTLOG_ERROR_TYPE, "mx is too long"); return FALSE; } cUrl += item; } // backmx if (backmx.length() > 0) { cUrl += _T("&backmx="); if (AtlEscapeUrl(backmx.c_str(), item, &itemLen, 256) == FALSE) { plog->LogEvent(EVENTLOG_ERROR_TYPE, "backmx is too long"); return FALSE; } cUrl += item; } // wildcard if (wildcard.length() > 0) { cUrl += _T("&wildcard="); if (AtlEscapeUrl(wildcard.c_str(), item, &itemLen, 256) == FALSE) { plog->LogEvent(EVENTLOG_ERROR_TYPE, "wildcard is too long"); return FALSE; } cUrl += item; } // issue request tstring msg = _T("Result for "); msg += hostname; msg += _T(" - HTTP "); TCHAR s[128]; if (client.Navigate(cUrl.c_str(), &navData) || true) { const BYTE* body = client.GetBody(); wsprintf(s, _T("%d"), client.GetStatus()); msg += s; msg += _T(" - "); WORD et = EVENTLOG_WARNING_TYPE; if (client.GetStatus() != 200) et = EVENTLOG_ERROR_TYPE; if (body != 0) { if (_tcsstr((const char*) body, "NOERROR") != 0) et = EVENTLOG_INFORMATION_TYPE; if (sizeof(TCHAR) > 1) { TCHAR* pData = new TCHAR[client.GetBodyLength() + 1]; if (pData) { mbstowcs((wchar_t*) pData, (const char*) body, client.GetBodyLength()); pData[client.GetBodyLength()] = 0; msg += pData; delete[] pData; } } else msg += (const char *) body; } plog->LogEvent(et, msg.c_str()); if (client.GetStatus() == 200) rval = TRUE; } else { wsprintf(s, _T("%d"), client.GetStatus()); msg += s; msg += _T(" - "); msg += _T("Navigate failed"); plog->LogEvent(EVENTLOG_ERROR_TYPE, msg.c_str()); } return rval; }