⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cookies.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    CHXString		strCookieReport;
#endif
    
    pCookies = NULL;
    pPlayerCookies = NULL;

    if (!IsCookieEnabled())
    {
	goto cleanup;
    }

    if (!m_bInitialized)
    {
	hr = Initialize();

	if (HXR_OK != hr)
	{
	    goto cleanup;
	}
    }
    else
    {
	SyncRMCookies(FALSE);
    }

    if (!pHost || !m_pCookiesHelper)
    {
	hr = HXR_FAILED;
	goto cleanup;
    }

    // return string to build    
    if (!(pValues = new CHXHeader()))
    {
	hr = HXR_OUTOFMEMORY;
	goto cleanup;
    }

    pValues->AddRef();

    cHostCopy = pHost;
    lColon    = cHostCopy.Find(':');
    if (lColon >= 0)
    {
	cHostCopy = cHostCopy.Left(lColon);
    }
    cHostCopy.MakeLower();

    // search for all cookies(Netscape only for now)
    for (l = 0; l < 2; l++)
    {
	switch (l)
	{
	case 0:
	    pCookiesList = m_pRMCookies;
	    bIsPlayerCookieList = TRUE;
	    break;
	case 1:
	    pCookiesList = m_pNSCookies;
	    bIsPlayerCookieList = FALSE;
	    break;
	default:
	    break;
	}

	if (!pCookiesList)
	{
	    continue;
	}

	for (i = pCookiesList->Begin(); i != pCookiesList->End(); ++i)
	{
	    pTempCookie = (CookieStruct*) (*i);
    
	    if (!pTempCookie->pHost)
	    {
		continue;
	    }
	    
	    // check the host or domain first
	    if(pTempCookie->bIsDomain)
	    {
		if (!DoesDomainMatch(*pTempCookie->pHost, cHostCopy))
		{
		    continue;
		}
	    }
	    else if(strcasecmp((const char*)*(pTempCookie->pHost), pHost))
	    {
		// hostname matchup failed.
		continue;
	    }

	    // shorter strings always come last so there can be no
	    // ambiquity						     	      
	    if(pTempCookie->pPath && 
	       !strncmp(pPath, (const char*)*(pTempCookie->pPath), pTempCookie->pPath->GetLength()))
	    {
		// check for expired cookies
		if(pTempCookie->expires && (pTempCookie->expires < cur_time))
		{
		    m_bSaveCookies = TRUE;
		    continue;
		}

		if (!pCookiesFound1)
		{
		    pCookiesFound1 = new CHXSimpleList();
		    pCookiesFound1->AddTail(pTempCookie);
		}
		else if (!WasCookieAdded(pCookiesFound1, pTempCookie))
		{
		    pCookiesFound1->AddTail(pTempCookie);
		}
		if(bIsPlayerCookieList)
		{
		    if(!strPlayerCookies.IsEmpty())
		    {
		        strPlayerCookies += "|";
		    }
		    strPlayerCookies += *pTempCookie->pCookieName;
#ifdef REPORT_COOKIES
		    strCookieReport += (strCookieReport.IsEmpty() ? "" : ", ");
		    strCookieReport += *pTempCookie->pCookieName;
		    strCookieReport += "=";
		    strCookieReport += *pTempCookie->pCookieValue;
#endif
		}
	    }
	}
    }

#ifdef _WINDOWS
    if (!_pInternetGetCookie || m_bMemoryOnly)
    {
	goto cleanup;
    }

    host_length = strlen(pHost);

    if (pPath)
    {
	path_length = strlen(pPath);
    }

    pURL = new char[host_length + path_length + 8];
    sprintf(pURL, "http://%s%s", pHost, pPath); /* Flawfinder: ignore */

    if (_pInternetGetCookie(pURL, NULL, pData, &dwSize) && !pData && dwSize)
    {
	pData = new char[dwSize+1];

	if (!_pInternetGetCookie(pURL, NULL, pData, &dwSize))
	{
	    goto cleanup;
	}

	cp = pData;

	while (pComma = (char*) ::HXFindChar(cp, ';'))
	{
	    *pComma = '\0';
	    pComma++;

	    if (pEqualSign = (char*) ::HXFindChar(cp, '='))
	    {
		*pEqualSign = '\0';
		pEqualSign++;

        	pNewCookie = new CookieStruct;
		bAdded = FALSE;

		// copy
		pNewCookie->pCookieValue = new CHXString(pEqualSign);
		pNewCookie->pCookieName = new CHXString(cp);
		pNewCookie->pPath = new CHXString(pPath);
		pNewCookie->pHost = new CHXString(pHost);
		pNewCookie->expires = 0;
		pNewCookie->bIsDomain = FALSE;
		pNewCookie->bMemoryOnly = FALSE;

		if(pNewCookie->pCookieName)
		{
		    pNewCookie->pCookieName->TrimLeft();
		    pNewCookie->pCookieName->TrimRight();
		}

		if (!WasCookieAdded(pCookiesFound1, pNewCookie))
		{
		    if (!pCookiesFound2)
		    {
			pCookiesFound2 = new CHXSimpleList();
			pCookiesFound2->AddTail(pNewCookie);
			bAdded = TRUE;
		    }
		    else if (!WasCookieAdded(pCookiesFound2, pNewCookie))
		    {
			pCookiesFound2->AddTail(pNewCookie);
			bAdded = TRUE;
		    }
		}
		
		if (!bAdded)
		{
		    HX_DELETE(pNewCookie);
		}
	    }

	    cp = pComma;
	}

	if (pEqualSign = (char*) ::HXFindChar(cp, '='))
	{
	    *pEqualSign = '\0';
	    pEqualSign++;

	    pNewCookie = new CookieStruct;
	    bAdded = FALSE;

	    // copy
	    pNewCookie->pCookieValue = new CHXString(pEqualSign);
	    pNewCookie->pCookieName = new CHXString(cp);
	    pNewCookie->pPath = NULL;
	    pNewCookie->pHost = NULL;
	    pNewCookie->expires = 0;
	    pNewCookie->bIsDomain = FALSE;
	    pNewCookie->bMemoryOnly = FALSE;

	    if(pNewCookie->pCookieName)
	    {
	        pNewCookie->pCookieName->TrimLeft();
	        pNewCookie->pCookieName->TrimRight();
	    }

	    if (!WasCookieAdded(pCookiesFound1, pNewCookie))
	    {
		if (!pCookiesFound2)
		{
		    pCookiesFound2 = new CHXSimpleList();
		    pCookiesFound2->AddTail(pNewCookie);
		    bAdded = TRUE;
		}
		else if (!WasCookieAdded(pCookiesFound2, pNewCookie))
		{
		    pCookiesFound2->AddTail(pNewCookie);
		    bAdded = TRUE;
		}
	    }

	    if (!bAdded)
	    {
		HX_DELETE(pNewCookie);
	    }
	}
    }
#endif /* _WINDOWS */

cleanup:

    if (pCookiesFound1)
    {
	for (i = pCookiesFound1->Begin(); i != pCookiesFound1->End(); ++i)
	{
	    pTempCookie = (CookieStruct*) (*i);

	    if(pTempCookie->pCookieName && pTempCookie->pCookieValue)
	    {
		::SaveStringToHeader(pValues,
				     (const char*)*(pTempCookie->pCookieName),
				     (char*)(const char*)*(pTempCookie->pCookieValue));
	    }
	}
    }

    if (pCookiesFound2)
    {
	for (i = pCookiesFound2->Begin(); i != pCookiesFound2->End(); ++i)
	{
	    pTempCookie = (CookieStruct*) (*i);

	    if(pTempCookie->pCookieName && pTempCookie->pCookieValue)
	    {
		::SaveStringToHeader(pValues,
				     (const char*)*(pTempCookie->pCookieName),
				     (char*)(const char*)*(pTempCookie->pCookieValue));
	    }

	    HX_DELETE(pTempCookie);
	}
    }

    if (m_pCookiesHelper)
    {
	hr = m_pCookiesHelper->UnPack(pValues, pCookies);
    }

#ifdef REPORT_COOKIES
    IHXBuffer* pBuff = NULL;
    if (m_pPreferences
		&& m_pPreferences->ReadPref("CookieData", pBuff) == HXR_OK
		&& 0 == stricmp((const char*)pBuff->GetBuffer(), "console"))
    {
	CHXString str;
	str.Format("Cookies requested, getting host: %s  path: %s  cookies: %s",
			pHost, pPath, 
			strCookieReport.IsEmpty() ? "<no player cookies>" : (const char *) strCookieReport);
	::CFShow(CHXCFString(str));
    }
    HX_RELEASE(pBuff);
#endif

    if(!strPlayerCookies.IsEmpty())
    {
	pPlayerCookies = new CHXBuffer;
	pPlayerCookies->AddRef();
	pPlayerCookies->Set((const UCHAR*)(const char*)strPlayerCookies, strPlayerCookies.GetLength() + 1);
    }

    HX_DELETE(pCookiesFound1);
    HX_DELETE(pCookiesFound2);
    HX_VECTOR_DELETE(pData);
    HX_VECTOR_DELETE(pURL);

    HX_RELEASE(pValues);
   
    return hr;
}

HX_RESULT	    
HXCookies::PrepareCookiesPath(void)
{
    HX_RESULT		hr = HXR_OK;
#ifndef _VXWORKS
    const char*		pRMCookiesPath = NULL;
    IHXBuffer*		pBuffer = NULL;

#if !defined(_CARBON) && !defined(_MAC_MACHO) /* figured out every time at runtime on the Mac since paths are not stable between runs */
    if (m_pPreferences && (m_pPreferences->ReadPref("CookiesPath", pBuffer) == HXR_OK))
    {
	m_pRMCookiesPath = new char[pBuffer->GetSize() + 1];
	strcpy(m_pRMCookiesPath, (const char*)pBuffer->GetBuffer()); /* Flawfinder: ignore */
    }
    HX_RELEASE(pBuffer);
#endif

    if( !m_pRMCookiesPath )
    {
	if (m_pPreferences && (m_pPreferences->ReadPref("UserSDKDataPath", pBuffer) == HXR_OK))
	{
	    pRMCookiesPath = (char*) pBuffer->GetBuffer();
	}
	else
	{
#if defined(_CARBON) || defined(_MAC_MACHO)
		CHXString strSDKPath = CHXFileSpecUtils::GetAppDataDir(HXVER_SDK_PRODUCT).GetPathName();
#elif defined(_UNIX)
	    pRMCookiesPath = getenv("HOME");
	    HX_ASSERT( pRMCookiesPath );	    
#else
	    pRMCookiesPath = GetDLLAccessPath()->GetPath(DLLTYPE_COMMON);
#endif        
	}
	
        if( pRMCookiesPath )
        {
        
            m_pRMCookiesPath = new char[strlen(pRMCookiesPath) + strlen(RM_COOKIE_FILE_NAME)+2];
	    ::strcpy(m_pRMCookiesPath, pRMCookiesPath); /* Flawfinder: ignore */
	    if (m_pRMCookiesPath[::strlen(m_pRMCookiesPath)-1] != OS_SEPARATOR_CHAR)
	    {
		strcat(m_pRMCookiesPath, OS_SEPARATOR_STRING); /* Flawfinder: ignore */
	    }

	    strcat(m_pRMCookiesPath, RM_COOKIE_FILE_NAME); /* Flawfinder: ignore */
            
	    HX_RELEASE(pBuffer);
            pBuffer = new CHXBuffer();
            pBuffer->AddRef();
            
            pBuffer->Set((const unsigned char*)m_pRMCookiesPath, strlen(m_pRMCookiesPath) + 1);    	
            
            if (m_pPreferences)
            {
                m_pPreferences->WritePref("CookiesPath", pBuffer);
            }
	
            HX_RELEASE(pBuffer);
        }
   }
#endif

#ifdef _WINDOWS
    HKEY    hMainAppKey = NULL;
    HKEY    hBiffKey = NULL;
    HKEY    hUsersKey = NULL;
    HKEY    hServersKey = NULL;
    HKEY    hCookiesKey = NULL;
    INT32   lSize = _MAX_PATH - 1;
    UINT32  ulSize = _MAX_PATH - 1;
    UINT32  ulType = 0;
    char    regKey[_MAX_PATH] = {0}; /* Flawfinder: ignore */
    char*   pPath = NULL;
    char*   pUser = NULL;
    char*   pValue = NULL;
    char*   pCursor = NULL;

    // Netscape Browser 4.0+
    if (RegOpenKeyEx(HKEY_CURRENT_USER, 
		     OS_STRING("Software\\Netscape\\Netscape Navigator\\biff"), 
		     0,
		     KEY_READ, &hBiffKey) == ERROR_SUCCESS) 
    {
	pUser = new char[_MAX_PATH];
	memset(pUser, 0, _MAX_PATH);

	if (RegQueryValueEx(hBiffKey, OS_STRING("CurrentUser"), 0, &ulType, (LPBYTE)pUser, &ulSize) == ERROR_SUCCESS) 
	{
	    SafeSprintf(regKey, _MAX_PATH, "Software\\Netscape\\Netscape Navigator\\biff\\users\\%s", pUser);
	    
	    if (RegOpenKeyEx(HKEY_CURRENT_USER, OS_STRING(regKey), 0, KEY_READ, &hUsersKey) == ERROR_SUCCESS)
	    {
		pValue = new char[_MAX_PATH];
		memset(pValue, 0, _MAX_PATH);

		ulSize = _MAX_PATH - 1;
		if (RegQueryValueEx(hUsersKey, OS_STRING("defaultServer"), 0, &ulType, (LPBYTE)pValue, &ulSize) == ERROR_SUCCESS)
		{
		    SafeSprintf(regKey, _MAX_PATH, "Software\\Netscape\\Netscape Navigator\\biff\\users\\%s\\servers\\%s",
			    pUser, pValue);

		    if (RegOpenKeyEx(HKEY_CURRENT_USER, OS_STRING(regKey), 0, KEY_READ, &hServersKey) == ERROR_SUCCESS)
		    {
			pPath = new char[_MAX_PATH];
			memset(pPath, 0, _MAX_PATH);

			ulSize = _MAX_PATH - 1;
			if (RegQueryValueEx(hServersKey, OS_STRING("popstatePath"), 0, &ulType, (LPBYTE)pPath, &ulSize) == ERROR_SUCCESS)
			{
			    // pPath ="..\mail\popstate.dat"
			    // the actual location of cookies is 1 level up
			    if (pCursor = ::HXReverseFindChar(pPath, '\\'))
			    {
				*pCursor = '\0';
			    
				if (pCursor = ::HXReverseFindChar(pPath, '\\'))
				{
				    *pCursor = '\0';

				    m_pNSCookiesPath = new char[strlen(pPath) + 13];
				    sprintf(m_pNSCookiesPath, "%s\\%s", pPath, RM_COOKIE_FILE_NAME); /* Flawfinder: ignore */
				    goto cleanup;
				}
			    }
			}
		    }
		}
	    }
	}
    }

    // Netscape Browser 3.0+
    if (RegOpenKeyEx(HKEY_CURRENT_USER, OS_STRING("Software\\Netscape\\Netscape Navigator\\Cookies"), 0,
	KEY_READ, &hCookiesKey) == ERROR_SUCCESS) 
    {
	HX_VECTOR_DELETE(pPath);
	pPath = new char[_MAX_PATH];
	memset(pPath, 0, _MAX_PATH);

	ulSize = _MAX_PATH - 1;
	if (RegQueryValueEx(hCookiesKey, OS_STRING("Cookie File"), 0, &ulType, (LPBYTE)pPath, &ulSize) == ERROR_SUCCESS)
	{
	    m_pNSCookiesPath = new char[strlen(pPath) + 1];
	    strcpy(m_pNSCookiesPath, pPath); /* Flawfinder: ignore */
	}
    }

cleanup:

    HX_RELEASE(pBuffer);

    if (hMainAppKey)
    {
	RegCloseKey(hMainAppKey);
    }

    if (hBiffKey)
    {
	RegCloseKey(hBiffKey);
    }

    if (hUsersKey)
    {
	RegCloseKey(hUsersKey);
    }

    if (hServersKey)
    {
	RegCloseKey(hServersKey);
    }

    if (hCookiesKey)
    {
	RegCloseKey(hCookiesKey);
    }

    HX_VECTOR_DELETE(pUser);
    HX_VECTOR_DELETE(pPath);
    HX_VECTOR_DELETE(pValue);    
#endif /* _WINDOWS */

    return hr;
}

void
HXCookies::ResetCookies(CHXSimpleList* pCookieList)
{
    CookieStruct*   pCookie = NULL;

    while (pCookieList && pCookieList->GetCount() > 0)
    {
	pCookie = (CookieStruct*) pCookieList->RemoveHead();
	HX_DELETE(pCookie);
    }
}

HX_RESULT	
HXCookies::FileReadLine(FILE* fp, char* pLine, UINT32 ulLineBuf, UINT32* pBytesRead)
{
#ifdef _OPENWAVE
    return HXR_NOTIMPL;
#else
    HX_RESULT	hr = HXR_OK;
    UINT32	i = 0;
    UINT32	ulBytesRead = 0;
    char*	pTmpBuf = NULL;

    if (!fp)
    {
	hr = HXR_FAILED;
	goto cleanup;
    }

    if (ulLineBuf < 1) 
    {
        *pBytesRead = 0;
        goto cleanup;
    }

    ulBytesRead = fread(pLine, sizeof(char), ulLineBuf, fp);
    pTmpBuf = pLine;

    if (ulBytesRead)
    {
	while (i < ulBytesRead) 
	{
#ifdef _MACINTOSH
	    if (pTmpBuf[i] == 10 || pTmpBuf[i] == 13)
#else
	    if (pTmpBuf[i] == 10)
#endif
	    {   // LF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -