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

📄 hxcleng.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    || !m_pProxyManager 
#endif /* HELIX_FEATURE_PROXYMGR */
#if defined(HELIX_FEATURE_SMARTERNETWORK)
    || !m_pPreferredTransportManager
#endif /* HELIX_FEATURE_SMARTERNETWORK */
    )
    {
    m_LastError = HXR_OUTOFMEMORY;
    }

    if (!m_LastError)
    {
#ifdef _MEDIUM_BLOCK
    m_pAllocator->AddRef();
#endif
    HX_ADDREF(m_pCommonClassFactory);
    HX_ADDREF(m_pScheduler);
#if defined(HELIX_FEATURE_OPTIMIZED_SCHEDULER)
    HX_ADDREF(m_pOptimizedScheduler);
#endif /* HELIX_FEATURE_OPTIMIZED_SCHEDULER */
#if defined(HELIX_FEATURE_PREFERENCES)
    HX_ADDREF(m_pOrigPreferences);
#endif /* HELIX_FEATURE_PREFERENCES */
#if defined(HELIX_FEATURE_REGISTRY)
    HX_ADDREF(m_pRegistry);
#endif /* HELIX_FEATURE_REGISTRY */
#if defined(HELIX_FEATURE_PLAYBACK_NET)
    HX_ADDREF(m_pOrigNetworkServices);
#endif /* HELIX_FEATURE_PLAYBACK_NET */
#if defined(HELIX_FEATURE_HYPER_NAVIGATE)
    HX_ADDREF(m_pOrigHyperNavigate);
#endif /* HELIX_FEATURE_HYPER_NAVIGATE */
#if defined(HELIX_FEATURE_ASM)
    HX_ADDREF(m_pASM);
#endif /* HELIX_FEATURE_ASM */
    HX_ADDREF(m_pPlayerSinkControl);
#if defined(HELIX_FEATURE_AUTHENTICATION)
    HX_ADDREF(m_pCredentialsCache);
#endif /* HELIX_FEATURE_AUTHENTICATION */
#if defined(HELIX_FEATURE_XMLPARSER)
    HX_ADDREF(m_pXMLParser);
#endif /* HELIX_FEATURE_XMLPARSER */
#if defined(HELIX_FEATURE_SYSTEMREQUIRED)
    HX_ADDREF(m_pSystemRequired);
#endif /* HELIX_FEATURE_SYSTEMREQUIRED */
#if defined(HELIX_FEATURE_PROXYMGR)
    HX_ADDREF(m_pProxyManager);
#endif /* HELIX_FEATURE_PROXYMGR */
#if defined(HELIX_FEATURE_SMARTERNETWORK)
    HX_ADDREF(m_pPreferredTransportManager);
#endif /* HELIX_FEATURE_SMARTERNETWORK */
#if defined(HELIX_FEATURE_OVERLAYMGR)
    HX_ADDREF(m_pOverlayManager);
#endif /* HELIX_FEATURE_OVERLAYMGR */

#if defined(HELIX_FEATURE_HYPER_NAVIGATE)
#ifndef _WINCE
    m_pOrigHyperNavigate->QueryInterface(IID_IHXHyperNavigate, 
                         (void**) &m_pHyperNavigate);
#endif
#endif /* defined(HELIX_FEATURE_HYPER_NAVIGATE) */
#if defined(HELIX_FEATURE_PREFERENCES)
    if (m_pOrigPreferences)
    {
	m_pOrigPreferences->QueryInterface(IID_IHXPreferences, 
					   (void**) &m_pPreferences);
    }
#endif /* HELIX_FEATURE_PREFERENCES */
#if defined(HELIX_FEATURE_PLAYBACK_NET)
    m_pOrigNetworkServices->QueryInterface(IID_IHXNetworkServices, 
                         (void**) &m_pNetworkServices);
#endif /* HELIX_FEATURE_PLAYBACK_NET */
    }

    if (!m_LastError)
    {
    // Assemble registry's key for the preferences 
    char* pCompanyName = new char[strlen(HXVER_COMMUNITY) + 1];
    strcpy(pCompanyName, HXVER_COMMUNITY); /* Flawfinder: ignore */

    char* pProductName = new char[strlen(HXVER_SDK_PRODUCT) + 1];
    strcpy(pProductName, HXVER_SDK_PRODUCT); /* Flawfinder: ignore */

    const ULONG32 nProdMajorVer = TARVER_MAJOR_VERSION;
    const ULONG32 nProdMinorVer = TARVER_MINOR_VERSION;

    char * pComa = HXFindChar(pCompanyName, ',');
    if(pComa)
    {
        *pComa = 0;   
    }

    pComa = HXFindChar(pProductName, ',');
    if(pComa)
    {
        *pComa = 0;   
    }

#if defined(HELIX_FEATURE_PREFERENCES)
#if defined(HELIX_FEATURE_NO_INTERNAL_PREFS)
    HX_RESULT theErr = HXR_OK;
#elif defined(HELIX_FEATURE_LITEPREFS)
    HX_RESULT theErr = m_pOrigPreferences->Open( 
        (const char*) pCompanyName, (const char*) pProductName, nProdMajorVer, nProdMinorVer);
    if( theErr != HXR_OUTOFMEMORY )
    {
       // HXR_FAIL probably just means the prefs file does not exist. We will
       // auto-create it when we do our first write.
       theErr = HXR_OK;
    }
#else
    HX_RESULT theErr = m_pOrigPreferences->OpenUserPref( 
        (const char*) pCompanyName, (const char*) pProductName, nProdMajorVer, nProdMinorVer);
#endif

    if (theErr)
    {
        HX_RELEASE(m_pOrigPreferences);
        HX_RELEASE(m_pPreferences);
    }

    // Read any paths from preferences that weren't set by our loader
    if(HXR_OK == theErr)
    {
        ReadUnsetPathsFromPrefs();
    }
#endif /* HELIX_FEATURE_PREFERENCES */

    HX_VECTOR_DELETE(pCompanyName);
    HX_VECTOR_DELETE(pProductName);

#ifndef _VXWORKS
    // Set the Plugin and Codec directories if they are not yet set
    if (!GetDLLAccessPath()->GetPath(DLLTYPE_PLUGIN))
    {
        CreatePluginDir();
    }
    if (!GetDLLAccessPath()->GetPath(DLLTYPE_CODEC))
    {
        CreateCodecDir();
    }
#endif // _VXWORKS
    }

    if (!m_LastError)
    {
#if defined(_STATICALLY_LINKED) || !defined(HELIX_FEATURE_PLUGINHANDLER2)
#if defined(HELIX_CONFIG_CONSOLIDATED_CORE)
    m_pPlugin2Handler = new BaseHandler();
#else /* HELIX_CONFIG_CONSOLIDATED_CORE */
    m_pPlugin2Handler = new HXPluginManager();
#endif /* HELIX_CONFIG_CONSOLIDATED_CORE */
#else
    m_pPlugin2Handler = new Plugin2Handler();
#endif /* _STATICALLY_LINKED */

    if (m_pPlugin2Handler)
    {
        m_pPlugin2Handler->AddRef();
    }
    else
    {
        m_LastError = HXR_OUTOFMEMORY;
    }
    }

#if defined(HELIX_FEATURE_HYPER_NAVIGATE)
#ifndef _WINCE
    m_pOrigHyperNavigate->Init((IUnknown*) (IHXClientEngine*)this);
#endif
#endif /* defined(HELIX_FEATURE_HYPER_NAVIGATE) */

#ifdef _UNIX
    m_select_callbacks = new CHXSimpleList;
#endif

#if defined(HELIX_FEATURE_PLAYBACK_NET)
#ifdef THREADS_SUPPORTED
    /* Start network thread here */
    ThreadEngine::GetThreadEngine();
#endif /*THREADS_SUPPORTED*/
#endif /* HELIX_FEATURE_PLAYBACK_NET */

#if defined(_MACINTOSH) && defined(_CARBON) && defined(THREADS_SUPPORTED) && defined(HELIX_FEATURE_PREFERENCES)
    ReadPrefBOOL(m_pPreferences, "UseMacOptimizedBlitting", m_bUseMacBlitMutex);
#endif
}

HXClientEngine::~HXClientEngine() 
{
    Close();
}

void
HXClientEngine::CreatePrefIfNoExist(const char* pName, const char* pValue)
{
#if defined(HELIX_FEATURE_PREFERENCES)
    IHXBuffer* pBuffer = NULL;

    if (m_pPreferences && m_pPreferences->ReadPref(pName, pBuffer) != HXR_OK)
    {
    pBuffer = new CHXBuffer();
    pBuffer->AddRef();
    
    pBuffer->Set((const unsigned char*)pValue, strlen(pValue) + 1);     

    m_pPreferences->WritePref(pName, pBuffer);
    }
    HX_RELEASE(pBuffer);
#endif
}

void
HXClientEngine::CreatePluginDir()
{
#if !defined(_VXWORKS) && !defined(__TCS__)
    char pPluginDir[_MAX_PATH + 1] = ""; /* Flawfinder: ignore */

#ifdef _WINCE
    SafeStrCpy(pPluginDir, "\\", _MAX_PATH + 1);
#elif defined (_WINDOWS) || defined (_WIN32)    
    if (!GetSystemDirectory(pPluginDir, _MAX_PATH))
    {
        SafeStrCpy(pPluginDir, "", _MAX_PATH + 1);
    }

    if (strlen(pPluginDir) > 0 && pPluginDir[strlen(pPluginDir) - 1] != '\\')
    {
        SafeStrCat(pPluginDir, "\\", _MAX_PATH + 1);
    }

    SafeStrCat(pPluginDir, "Real", _MAX_PATH + 1);
#elif defined (_UNIX)
    SafeStrCpy(pPluginDir, getenv("HOME"), _MAX_PATH+1);
    SafeStrCat(pPluginDir, "/Real", _MAX_PATH+1 - strlen(pPluginDir));
#elif defined (_MACINTOSH)

    // xxxbobclark this assumes that the shared libraries live right
    // next to the executable. It's highly recommended that if you're
    // writing a TLC, you call SetPath yourself...
    SafeStrCpy(pPluginDir, "", _MAX_PATH + 1);

#endif // defined (_WINDOWS) || defined (_WIN32)

    // Set the Path
    GetDLLAccessPath()->SetPath(DLLTYPE_PLUGIN, pPluginDir);
#endif // _VXWORKS
}

void
HXClientEngine::CreateCodecDir()
{
#if !defined(_VXWORKS) && !defined(__TCS__)
    const char* pPath = NULL;
    CHXString codecDir;

    pPath = GetDLLAccessPath()->GetPath(DLLTYPE_PLUGIN);

    if (pPath) codecDir = pPath;

    // xxxbobclark this assumes that the codecs live right next
    // to the executable. It's highly recommended that if you're
    // writing a TLC, you call SetPath yourself...
#ifndef _MACINTOSH
    if (strcmp((const char*)codecDir.Right(1), OS_SEPARATOR_STRING))
    {
    codecDir += OS_SEPARATOR_STRING;
    }
    
    codecDir += "Codecs";
#endif

    // Set the Path
    GetDLLAccessPath()->SetPath(DLLTYPE_CODEC, (const char*)codecDir);
#endif // _VXWORKS
}

void HXClientEngine::_Initialize(void)
{
    IHXBuffer* pValue = NULL;    

#if defined(HELIX_FEATURE_AUDIO)
    if (!m_pAudioSession)
    {
        m_pAudioSession = NewAudioSession();
        if( !m_pAudioSession )
        {
            m_LastError = HXR_OUTOFMEMORY;
            return;
        }
        HX_ADDREF(m_pAudioSession);
    }
#endif /* HELIX_FEATURE_AUDIO */

    // Init IHXRegistry entries
    InitializeRegistry();

#if defined(HELIX_FEATURE_PREFERENCES)
    if (!m_LastError)
    {

#if !defined(HELIX_FEATURE_NO_INTERNAL_PREFS)
    if (m_pOrigPreferences)
    {
        m_pOrigPreferences->SetContext((IUnknown*) (IHXClientEngine*)this);
    }
#endif /* !defined(HELIX_FEATURE_NO_INTERNAL_PREFS) */

    // generate GUID if it doesn't exist
    BOOL bRegenerate = TRUE;

    if (m_pPreferences &&
	m_pPreferences->ReadPref(CLIENT_GUID_REGNAME, pValue) == HXR_OK)
    {
        char* pszGUID = DeCipher((char*)pValue->GetBuffer());
        if(pszGUID && strlen(pszGUID) == 36)
        bRegenerate = FALSE;

        HX_RELEASE(pValue);
        if(pszGUID)
        delete[] pszGUID;
    }

    if(bRegenerate)
    {
        CHXString strGUID;
        char* pszGUIDMangled = NULL;
        uuid_tt tmpGUID;
            CHXuuid newGUID;

            newGUID.GetUuid(&tmpGUID);
            if(CHXuuid::HXUuidToString((const uuid_tt*)&tmpGUID, &strGUID) == HXR_OK)
            {
        // mangle the GUID for protection
        pszGUIDMangled = Cipher((char*)strGUID.GetBuffer(strGUID.GetLength()));

        CHXBuffer* lpBuffer = new CHXBuffer();
           
        lpBuffer->AddRef();
        lpBuffer->Set((const unsigned char*)pszGUIDMangled, strlen(pszGUIDMangled)+1);

	if (m_pPreferences)
	{
	    m_pPreferences->WritePref(CLIENT_GUID_REGNAME, lpBuffer);
	}

        HX_RELEASE(lpBuffer);

        delete[] pszGUIDMangled;
            }
    }

    // create/initialize the preferences which don't exist  
    CreatePrefIfNoExist("AutoTransport", "1");
    CreatePrefIfNoExist("SendStatistics", "1");

    CreatePrefIfNoExist("AttemptRTSPvMulticast", "1");
    CreatePrefIfNoExist("AttemptRTSPvUDP", "1");
    CreatePrefIfNoExist("AttemptRTSPvTCP", "1");
    CreatePrefIfNoExist("AttemptRTSPvHTTP", "1");
    
    CreatePrefIfNoExist("RTSPProxySupport", "0");
    CreatePrefIfNoExist("RTSPProxyHost", "");
    CreatePrefIfNoExist("RTSPProxyPort", "554");

    CreatePrefIfNoExist("AttemptPNAvMulticast", "1");
    CreatePrefIfNoExist("AttemptPNAvUDP", "1");
    CreatePrefIfNoExist("AttemptPNAvTCP", "1");
    CreatePrefIfNoExist("AttemptPNAvHTTP", "1");
    
    CreatePrefIfNoExist("PNAProxySupport", "0");
    CreatePrefIfNoExist("PNAProxyHost", "");
    CreatePrefIfNoExist("PNAProxyPort", "1090");

    CreatePrefIfNoExist("HTTPProxySupport", "0");
    CreatePrefIfNoExist("HTTPProxyHost", "");
    CreatePrefIfNoExist("HTTPProxyPort", "80");

    InitPaths();

    UINT32 ulMinBandwidth = DEFAULT_MAX_BANDWIDTH;
    /* Add default min/max bandwidth */

    if (m_pPreferences)
    {
	m_pPreferences->ReadPref("Bandwidth", pValue);
	if (!pValue || (atoi((const char*)pValue->GetBuffer()) == 0))
	{
	    HX_RELEASE(pValue);
	    
	    pValue = new CHXBuffer();
	    pValue->AddRef();
	    
	    pValue->SetSize(15);    
	    sprintf((char*)pValue->GetBuffer(), "%lu", DEFAULT_MAX_BANDWIDTH); /* Flawfinder: ignore */
	    m_pPreferences->WritePref("Bandwidth", pValue);
	}
	
	ulMinBandwidth = ::atoi((const char*)pValue->GetBuffer());

	HX_RELEASE(pValue);
    }

    UINT32 ulMaxBandwidth = 0;
    ReadPrefINT32(m_pPreferences, "MaxBandwidth", ulMaxBandwidth);

    if (ulMaxBandwidth < ulMinBandwidth)
    {
        /* If we did read some value from the pref but somehow
         * it was set lower to the Bandwidth value, we make
         * it equal to the Bandwidth value...else set it
         * to the default max bandwdith value.
         */
        if (ulMaxBandwidth > 0)
        {
        ulMaxBandwidth = ulMinBandwidth;
        }
        else
        {
        ulMaxBandwidth = DEFAULT_MAX_BANDWIDTH;
        }

        HX_RELEASE(pValue);

        pValue = new CHXBuffer();
        pValue->AddRef();       
        pValue->SetSize(15);    

        if (ulMaxBandwidth < ulMinBandwidth)
        {
        ulMaxBandwidth = ulMinBandwidth;
        }
	
	if (m_pPreferences)
	{
	    sprintf((char*)pValue->GetBuffer(), "%lu", ulMaxBandwidth); /* Flawfinder: ignore */
	    m_pPreferences->WritePref("MaxBandwidth", pValue);
	}
    }

    HX_RELEASE(pValue);
    }    
#endif /* HELIX_FEATURE_PREFERENCES */

#if defined(_WIN32) || defined(THREADS_SUPPORTED)
    if (!m_bUseCoreThreadExternallySet)
    {
        ReadPrefBOOL(m_pPreferences, "UseCoreThread", m_bUseCoreThread);  
    }
#endif /*_WIN32*/

#if defined(HELIX_FEATURE_AUDIO)
    if (!m_LastError)
    {
    m_LastError = m_pAudioSession->Init((IUnknown*) (IHXClientEngine*)this);
    m_pAudioSession->SetCoreMutex(m_pCoreMutex);
    }
#endif /* HELIX_FEATURE_AUDIO */

⌨️ 快捷键说明

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