chxavaccesspointdb.cpp

来自「symbian 下的helix player源代码」· C++ 代码 · 共 325 行

CPP
325
字号
/************************************************************************
 * chxavaccesspointdb.cpp
 * ----------------------
 *
 * Synopsis:
 * Access point utility routines implementation.  
 *
 *
 * Target:
 * Symbian OS
 *
 *
 * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 ************************************************************************/

// Symbian includes...
#include <aputils.h> 

// Helix includes...
#include "hxslist.h"
#include "hxstring.h"

// Includes from this project...
#include "chxavaccesspointdb.h"
#include "chxavstringutils.h"
#include "chxavcleanupstack.h"



/*
 * CHXAvAccessPointDB
 * ------------------
 * Ctor
 *
 */
CHXAvAccessPointDB::CHXAvAccessPointDB() :  m_accessPoints(NULL), m_isOpen(FALSE)
{
}

void CHXAvAccessPointDB::ConstructL()
{
    m_accessPoints = new (ELeave) CHXSimpleList;
    OpenDBL();
}



/* 
 * ~CHXAvAccessPointDB
 * -------------------
 * Dtor...close db if still open.
 *
 */
CHXAvAccessPointDB::~CHXAvAccessPointDB()
{
    ClearAccessPointsList();
    if (m_accessPoints != NULL) delete m_accessPoints;
    if (m_isOpen) CloseDB();
}





/*
 * OpenDB
 * ------
 * Open the access point database and prepare for transactions.
 * False returned if unsuccessful.
 *
 */
bool
CHXAvAccessPointDB::OpenDBL()
{
    if (m_isOpen) return true;
    bool ret = FALSE;
    m_spDatabase = CCommsDatabase::NewL(EDatabaseTypeIAP);
    m_isOpen = TRUE;
    return ret;
}



/*
 * CloseDB
 * ------
 * Clean up a little.
 *
 */
void
CHXAvAccessPointDB::CloseDB()
{   
   m_isOpen = FALSE;
}






/*
 * GetIapIDFromNameL
 * -----------------
 * Copy out the id that corresponds to the given name.
 *
 */
TUint32
CHXAvAccessPointDB::GetIapIDFromNameL(const CHXString& name)
{
    GetAllAccessPointsL();

    // Go through the list...
    LISTPOSITION pos = m_accessPoints->GetHeadPosition();
    while (pos != NULL)
    {
	AccessPointInfoPtr info = (AccessPointInfoPtr)(m_accessPoints->GetNext(pos));
	if (info != NULL)
	{
	    if (info->name.CompareNoCase(name) == 0)
	    {
		return info->id;
	    }
	}
    }
    return 0;
}




/* 
 * GetAllAccessPointsL
 * ------------------
 * Populates the accesspoint list with the current set of access points.
 *
 */
void
CHXAvAccessPointDB::GetAllAccessPointsL()
{
    ClearAccessPointsList();

    // Open a view on the access point table...
    m_spTable = m_spDatabase->OpenTableLC(TPtrC(IAP));
    CleanupStack::Pop();

    CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
    AUTO_POP_DEL(pUtils);

    // Now that we have a table view...we will navigate it...
    TInt err = m_spTable->GotoFirstRecord();
    while (err == KErrNone)
    {
	// Get the Id of this record...
	TUint32 id = 0;
	m_spTable->ReadUintL(TPtrC(COMMDB_ID), id);

	// Get the nave of this record...
	HBufC *name = NULL;
	name = m_spTable->ReadLongTextLC(TPtrC(COMMDB_NAME));
	AUTO_POP_DEL(name);
	CHXString nameStr = CHXAvStringUtils::DescToString(name->Des());

	// Get the service id...
	TUint32 iapService = 0;
	m_spTable->ReadUintL(TPtrC(IAP_SERVICE), iapService);

	// Save these values in the list...
	AccessPointInfoPtr info = new (ELeave) AccessPointInfo;
	info->id = id;
	info->service = iapService;
	info->name = nameStr;
    
	TBool exists = pUtils->IAPExistsL(id);
	if (exists)
	    info->wapId = pUtils->WapIdFromIapIdL(id);	

	m_accessPoints->AddTail((void *)info);

	// Advance to the next record...
	err = m_spTable->GotoNextRecord();
    }
}

/*
 * GetAPInfo
 * ---------
 * Return true if internet AP exists
 *
 */
bool
CHXAvAccessPointDB::IsValidL(TUint32 iapId)
{
    CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
    AUTO_POP_DEL(pUtils);
    return pUtils->IAPExistsL(iapId);
}

/*
 * GetAPInfo
 * ---------
 * Returns the info struct of the record by it's id.
 *
 */
AccessPointInfoPtr
CHXAvAccessPointDB::GetAPInfo(TUint32 iapId)
{
    LISTPOSITION pos = m_accessPoints->GetHeadPosition();
    while (pos != NULL)
    {
	AccessPointInfoPtr info = (AccessPointInfoPtr)(m_accessPoints->GetNext(pos));
	if (info->id == iapId)
	    return info;
    }
    return NULL;
}








/*
 * ClearAccessPointsList
 * ---------------------
 * Clear the list.
 *
 */
void
CHXAvAccessPointDB::ClearAccessPointsList()
{
    LISTPOSITION pos = NULL;
    pos = m_accessPoints->GetHeadPosition();
    while (pos != NULL)
    {
	AccessPointInfoPtr info = (AccessPointInfoPtr)(m_accessPoints->GetNext(pos));
	delete info;
    }
    m_accessPoints->RemoveAll();
}




/*
 * AllocAccessPointNameL
 * ---------------------
 * Get the name given the access point id.
 *
 */
HBufC* 
CHXAvAccessPointDB::AllocAccessPointNameL(TUint32 iapId)
{
    CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
    AUTO_POP_DEL(pUtils);

//    AccessPointInfoPtr info = GetAPInfo(iapId);
  //  HX_ASSERT(info != NULL);
    
    HBufC* pbuff = HBufC::NewL(KModifiableTextLength);
    AUTO_PUSH_POP(pbuff); 
    TPtr ptr = pbuff->Des();
    TRAPD(err, pUtils->NameL(GetWapIdFromAPIdL(iapId), ptr));
    
    return pbuff;
}


/* 
 * SupportsInternetAccessL
 * ------------------
 * Return true if given wap ap id supports IP connections
 *
 */
bool
CHXAvAccessPointDB::SupportsInternetAccessL(TUint32 wapApId)
{
    HX_ASSERT(wapApId);
    bool bSupportsInternet = false;

    if(wapApId != 0)
    {
        CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
        AUTO_POP_DEL(pUtils);

        TCommsDbIspType ispType;
        pUtils->ISPTypeL(wapApId, ispType);
        bSupportsInternet = (EIspTypeInternetOnly == ispType || EIspTypeInternetAndWAP == ispType);
    }
    return bSupportsInternet;
}


TUint32 CHXAvAccessPointDB::GetAPIdFromWapIdL(TUint32 wapApId)
{    
    TUint32 iapId = 0;
    if(wapApId != 0)
    {
        CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
        AUTO_POP_DEL(pUtils);
        iapId = pUtils->IapIdFromWapIdL(wapApId);
    }

    return iapId;
}



TUint32 CHXAvAccessPointDB::GetWapIdFromAPIdL(TUint32 iapId)
{
    TUint32 wapApId = 0;
    if(iapId != 0)
    {
        CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
        AUTO_POP_DEL(pUtils);
        wapApId = pUtils->WapIdFromIapIdL(iapId);
    }
    return wapApId;
}



⌨️ 快捷键说明

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