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

📄 hxntsrc.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/* ***** BEGIN LICENSE BLOCK ***** * Source last modified: $Id: hxntsrc.cpp,v 1.63.2.4 2004/07/13 17:12:04 ping Exp $ *  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved. *  * The contents of this file, and the files included with this file, * are subject to the current version of the RealNetworks Public * Source License (the "RPSL") available at * http://www.helixcommunity.org/content/rpsl unless you have licensed * the file under the current version of the RealNetworks Community * Source License (the "RCSL") available at * http://www.helixcommunity.org/content/rcsl, in which case the RCSL * will apply. You may also obtain the license terms directly from * RealNetworks.  You may not use this file except in compliance with * the RPSL or, if you have a valid RCSL with RealNetworks applicable * to this file, the RCSL.  Please see the applicable RPSL or RCSL for * the rights, obligations and limitations governing use of the * contents of the file. *  * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL") in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your version of * this file only under the terms of the GPL, and not to allow others * to use your version of this file under the terms of either the RPSL * or RCSL, indicate your decision by deleting the provisions above * and replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient may * use your version of this file under the terms of any one of the * RPSL, the RCSL or the GPL. *  * This file is part of the Helix DNA Technology. RealNetworks is the * developer of the Original Code and owns the copyrights in the * portions it created. *  * This file, and the files included with this file, is distributed * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET * ENJOYMENT OR NON-INFRINGEMENT. *  * Technology Compatibility Kit Test Suite(s) Location: *    http://www.helixcommunity.org/content/tck *  * Contributor(s): *  * ***** END LICENSE BLOCK ***** */#include "hxcom.h"#include "hlxclib/stdio.h"#if defined (_UNIX) || defined (_WIN16)#include <stdlib.h>#endif#include "hxcomm.h"#include "hxplugn.h"#include "ihxpckts.h"#include "hxpends.h"#include "hxfiles.h"#include "hxengin.h"#include "hxcore.h"#include "hxprefs.h"#include "hxpref.h"#include "hxausvc.h"#include "hxasm.h"#include "hxauthn.h"#include "hxgroup.h"#include "hxsmbw.h"#include "hxrsdbf.h"#include "hxmime.h"#include "hxslist.h"#include "hxstring.h"#include "portaddr.h"#include "chxeven.h"#include "chxelst.h"#include "strminfo.h"#include "hxbsrc.h"#include "hxsrc.h"#include "hxntsrc.h"#include "hxstrm.h"#include "hxplay.h"#include "rtspif.h"#include "hxprotocol.h"#include "dtrvtcon.h"#include "rtspprotocol.h"#if defined(HELIX_FEATURE_PNA)#include "hxpnapro.h"#endif /* HELIX_FEATURE_PNA */#include "rmfftype.h"#include "prefdefs.h"#include "plprefk.h"#include "hxtick.h"#include "netbyte.h"#include "hxcom.h"#include "hxstrutl.h"#include "ihxpckts.h"#include "chxpckts.h"#include "hxmap.h"#include "hxstat.h"#include "hxmangle.h"#include "srcinfo.h"#include "srcerrs.h"#include "errdbg.h"#include "ihxcookies.h"#include "pacutil.h"#if defined(HELIX_FEATURE_NETCHECK)#include "netchck.h"#endif /* defined(HELIX_FEATURE_NETCHECK) */#include "hxrasyn.h"#include "hxaudstr.h"#include "hxaudses.h"#include "verutil.h"#include "hxrendr.h"#include "hxcleng.h"#include "wmbufctl.h"#include "fbbufctl.h"#include "clntcore.ver"#include "hxver.h"#include "hxwinver.h"#include "hxheap.h"#ifdef _DEBUG#undef HX_THIS_FILEstatic const char HX_THIS_FILE[] = __FILE__;#endif// maximum level of statistics that we wanna send back to the server#define MAX_STATS_MASK                  15      // value from server is a bit field#define MAX_LOGINFO_LENGTH              2048    // maximum of 2K bytes of statistics/* RTSP Setup may take a lot ot time */#define NEW_DEF_SETTINGS_TIMEOUT    3000#define MINIMUM_TIMEOUT             5const short int MAX_CLOAK_PORTS = 4;const UINT16 g_uCloakPorts[MAX_CLOAK_PORTS] = {80, 8080, 554, 7070};#define CLOAKPORT_URL_OPTION    "cloakport"HXNetSource::HXNetSource() :      m_bLossCorrection (FALSE)    , m_pHost (0)    , m_pPath (NULL)    , m_pResource (0)    , m_uPort (0)    , m_bRTSPProtocol (FALSE)    , m_pProxy (0)    , m_uProxyPort (0)    , m_bUseProxy (FALSE)    , m_pCloakPortList(NULL)    , m_nNumberOfCloakPorts(0)    , m_nCurrPortIdx (0)    , m_uCurrCloakedPort(0)    , m_bUseUDPPort (FALSE)    , m_pProto (0)    , m_ulStartBuffering (0)    , m_bSendStatistics (TRUE)    , m_ulServerTimeOut (90)    , m_ulConnectionTimeout(DEFAULT_CONN_TIMEOUT)    , m_bAtInterrupt (FALSE)    , m_fReBufferPercent ((float)0.)    , m_pProtocolStatus (0)    , m_ulMulticastTimeout (NEW_DEF_SETTINGS_TIMEOUT)    , m_ulUDPTimeout (NEW_DEF_SETTINGS_TIMEOUT)    , m_ulTCPTimeout(NEW_DEF_SETTINGS_TIMEOUT)    , m_ulStartDataWait (0)    , m_ulServerVersion(0)    , m_ulTransportPrefMask(0)    , m_bDataWaitStarted(FALSE)    , m_bConnectionWait(TRUE)    , m_ulFirstDataArrives (0)    , m_uProtocolType(unknownProtocol)    , m_bPerfectPlayPreferenceRead(FALSE)    , m_bPerfectPlayErrorChecked(FALSE)    , m_CurrentTransport(UnknownMode)    , m_PreferredTransport(UnknownMode)    , m_bServerHasPerfectPlay(FALSE)    , m_ulSendStatsMask(0)    , m_ulStatsInterval(0)    , m_bServerHasTransportSwitching (FALSE)    , m_bForcePerfectPlay (FALSE)    , mServerSelRecordSupport(FALSE)    , mInterframeControlSupport(FALSE)    , mServerHasBandwidthReport(FALSE)    , mServerHasFrameControl(FALSE)    , m_bInRetryMode(FALSE)    , m_bPushDownSet(FALSE)    , m_pushDownStatus(PUSHDOWN_NONE)    , m_bRARVSource(FALSE)    , m_bRARVSourceVerified(FALSE)    , m_bBruteForceReconnected(FALSE)    , m_bBruteForceConnectToBeDone(FALSE)    , m_lRAStreamNumber(-1)    , m_pLogInfoList(NULL)    , m_ulLogInfoLength(0)    , m_bResendAuthenticationInfo(FALSE)    , m_bUserHasCalledResume(FALSE)    , m_bUserHasCalledStartInit(FALSE)    , m_bTimeBased(FALSE)    , m_uLastBuffering(0)    , m_uLastStatusCode(HX_STATUS_BUFFERING)    , m_bAltURL(FALSE)    , m_bNoLatency(FALSE)    , m_bNoLatencySet(FALSE)    , m_pCookies(NULL)    , m_pCookies2(NULL)    , m_ulSeekPendingTime(0)    , m_bSeekPending(FALSE)    , m_prefTransportState(PTS_UNKNOWN)    , m_pPreferredTransport(NULL)    , m_pPreferredTransportManager(NULL)    , m_pReconnectCallback(NULL)#if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)    , m_pStatsCallback(NULL)#endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */    , m_bAttemptReconnect(TRUE)    , m_pszReconnectServer(NULL)    , m_pszReconnectProxy(NULL)    , m_pszReconnectURL(NULL)    , m_ulReconnectServerPort(0)    , m_ulReconnectProxyPort(0)    , m_pszRedirectServer(NULL)    , m_pszRedirectResource(NULL)    , m_pszRedirectURL(NULL)    , m_ulRedirectServerPort(0)    , m_pPAC(NULL)    , m_pPACInfoList(NULL)    , m_PACInfoPosition(0)    , m_state(NETSRC_READY)    , m_pBufferCtl(NULL)    , m_pWMBufferCtl(NULL){    HX_TRACE("HXNetSource::HXNetSource");    memset(m_szUserName, 0, MAX_DISPLAY_NAME);    memset(m_szPassword, 0, MAX_DISPLAY_NAME);}HXNetSource::~HXNetSource(){    DoCleanup();    HX_DELETE(m_pPACInfoList);    HX_VECTOR_DELETE(m_pHost);    HX_VECTOR_DELETE(m_pPath);    HX_VECTOR_DELETE(m_pResource);    HX_VECTOR_DELETE(m_pCloakPortList);    HX_VECTOR_DELETE(m_pszReconnectServer);    HX_VECTOR_DELETE(m_pszReconnectProxy);    HX_VECTOR_DELETE(m_pszReconnectURL);    HX_VECTOR_DELETE(m_pszRedirectServer);    HX_VECTOR_DELETE(m_pszRedirectResource);    HX_VECTOR_DELETE(m_pszRedirectURL);    HX_RELEASE(m_pProtocolStatus);    HX_RELEASE(m_pCookies);    HX_RELEASE(m_pCookies2);    HX_RELEASE(m_pPreferredTransport);    HX_RELEASE(m_pPreferredTransportManager);    HX_RELEASE(m_pPAC);    HX_TRACE("HXNetSource::~HXNetSource");}HX_RESULTHXNetSource::DoCleanup(EndCode endCode){    HX_TRACE("HXNetSource::DoCleanup");    if (m_pBufferCtl)    {	m_pBufferCtl->Close();    }    HX_RELEASE(m_pBufferCtl);    HX_RELEASE(m_pWMBufferCtl);    m_srcEndCode = endCode;#if defined(HELIX_FEATURE_PAC)    if (NETSRC_PACPENDING == m_state)    {        m_state = NETSRC_READY;        m_pPAC->AbortProxyInfo(this);    }#endif /* HELIX_FEATURE_PAC */#if defined(HELIX_FEATURE_SMARTERNETWORK)    // notify the failure of transport detection    if (m_pPreferredTransport)    {        m_pPreferredTransport->RemoveTransportSink(this);        if (m_pPlayer && m_pHost && m_prefTransportState != PTS_READY)        {            m_pPreferredTransport->RemoveTransport();            HX_RELEASE(m_pPreferredTransport);        }    }#endif /* HELIX_FEATURE_SMARTERNETWORK */    // sends the stats    if (m_pProto)    {        // log stop action        LogInformation("STOP", NULL);        if (m_bSendStatistics)        {            m_pProto->send_statistics(m_ulSendStatsMask);        }    }    HXSource::DoCleanup(endCode);    cleanup_proxy();    /* UnRegister any previously registered source */    if (m_pSourceInfo)    {        m_pSourceInfo->UnRegister();    }    //  Close down the net connection    if (m_pProto)    {        m_pProto->stop();        HX_RELEASE (m_pProto);    }    // cleanup the log list    if (m_pLogInfoList)    {        while (m_pLogInfoList->GetCount() > 0)        {            char* pszInfo = (char*) m_pLogInfoList->RemoveHead();            delete [] pszInfo;        }        HX_DELETE(m_pLogInfoList);    }    if (m_pReconnectCallback)    {        m_pReconnectCallback->CancelCallback();        HX_RELEASE(m_pReconnectCallback);    }#if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)    if (m_pStatsCallback)    {        m_pStatsCallback->CancelCallback();        HX_RELEASE(m_pStatsCallback);    }#endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */#if defined(HELIX_FEATURE_PAC)    while (m_pPACInfoList && m_pPACInfoList->GetCount())    {        PACInfo* pPACInfo = (PACInfo*)m_pPACInfoList->RemoveHead();        HX_DELETE(pPACInfo);    }#endif /* HELIX_FEATURE_PAC */    return HXR_OK;}///////////////////////////////////////////////////////////////////////////      Method://              IUnknown::QueryInterface//      Purpose://              Implement this to export the interfaces supported by your//              object.//STDMETHODIMPHXNetSource::QueryInterface(REFIID riid, void** ppvObj){    if (HXSource::QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    else if (IsEqualIID(riid, IID_IHXRegistryID))    {        AddRef();        *ppvObj = (IHXRegistryID*)this;        return HXR_OK;    }    else if (IsEqualIID(riid, IID_IHXPreferredTransportSink))    {        AddRef();        *ppvObj = (IHXPreferredTransportSink*)this;        return HXR_OK;    }    else if (m_pBufferCtl &&	     m_pBufferCtl->QueryInterface(riid, ppvObj) == HXR_OK)    {	return HXR_OK;    }    else if (m_pProto &&             m_pProto->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    else if (m_pPlayer &&             m_pPlayer->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    // we don't have m_pPlayer during AutoConfig    else if (m_pEngine &&             m_pEngine->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    *ppvObj = NULL;    return HXR_NOINTERFACE;}///////////////////////////////////////////////////////////////////////////      Method://              IUnknown::AddRef//      Purpose://              Everyone usually implements this the same... feel free to use//              this implementation.//STDMETHODIMP_(ULONG32)HXNetSource::AddRef(){    return InterlockedIncrement(&m_lRefCount);}///////////////////////////////////////////////////////////////////////////      Method://              IUnknown::Release//      Purpose://              Everyone usually implements this the same... feel free to use//              this implementation.//STDMETHODIMP_(ULONG32)HXNetSource::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {        return m_lRefCount;

⌨️ 快捷键说明

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