chxavaccesspointdb.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:6k
源码类别:

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * chxavaccesspointdb.cpp
  3.  * ----------------------
  4.  *
  5.  * Synopsis:
  6.  * Access point utility routines implementation.  
  7.  *
  8.  *
  9.  * Target:
  10.  * Symbian OS
  11.  *
  12.  *
  13.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  14.  *
  15.  ************************************************************************/
  16. // Symbian includes...
  17. #include <aputils.h> 
  18. // Helix includes...
  19. #include "hxslist.h"
  20. #include "hxstring.h"
  21. // Includes from this project...
  22. #include "chxavaccesspointdb.h"
  23. #include "chxavstringutils.h"
  24. #include "chxavcleanupstack.h"
  25. /*
  26.  * CHXAvAccessPointDB
  27.  * ------------------
  28.  * Ctor
  29.  *
  30.  */
  31. CHXAvAccessPointDB::CHXAvAccessPointDB() :  m_accessPoints(NULL), m_isOpen(FALSE)
  32. {
  33. }
  34. void CHXAvAccessPointDB::ConstructL()
  35. {
  36.     m_accessPoints = new (ELeave) CHXSimpleList;
  37.     OpenDBL();
  38. }
  39. /* 
  40.  * ~CHXAvAccessPointDB
  41.  * -------------------
  42.  * Dtor...close db if still open.
  43.  *
  44.  */
  45. CHXAvAccessPointDB::~CHXAvAccessPointDB()
  46. {
  47.     ClearAccessPointsList();
  48.     if (m_accessPoints != NULL) delete m_accessPoints;
  49.     if (m_isOpen) CloseDB();
  50. }
  51. /*
  52.  * OpenDB
  53.  * ------
  54.  * Open the access point database and prepare for transactions.
  55.  * False returned if unsuccessful.
  56.  *
  57.  */
  58. bool
  59. CHXAvAccessPointDB::OpenDBL()
  60. {
  61.     if (m_isOpen) return true;
  62.     bool ret = FALSE;
  63.     m_spDatabase = CCommsDatabase::NewL(EDatabaseTypeIAP);
  64.     m_isOpen = TRUE;
  65.     return ret;
  66. }
  67. /*
  68.  * CloseDB
  69.  * ------
  70.  * Clean up a little.
  71.  *
  72.  */
  73. void
  74. CHXAvAccessPointDB::CloseDB()
  75. {   
  76.    m_isOpen = FALSE;
  77. }
  78. /*
  79.  * GetIapIDFromNameL
  80.  * -----------------
  81.  * Copy out the id that corresponds to the given name.
  82.  *
  83.  */
  84. TUint32
  85. CHXAvAccessPointDB::GetIapIDFromNameL(const CHXString& name)
  86. {
  87.     GetAllAccessPointsL();
  88.     // Go through the list...
  89.     LISTPOSITION pos = m_accessPoints->GetHeadPosition();
  90.     while (pos != NULL)
  91.     {
  92. AccessPointInfoPtr info = (AccessPointInfoPtr)(m_accessPoints->GetNext(pos));
  93. if (info != NULL)
  94. {
  95.     if (info->name.CompareNoCase(name) == 0)
  96.     {
  97. return info->id;
  98.     }
  99. }
  100.     }
  101.     return 0;
  102. }
  103. /* 
  104.  * GetAllAccessPointsL
  105.  * ------------------
  106.  * Populates the accesspoint list with the current set of access points.
  107.  *
  108.  */
  109. void
  110. CHXAvAccessPointDB::GetAllAccessPointsL()
  111. {
  112.     ClearAccessPointsList();
  113.     // Open a view on the access point table...
  114.     m_spTable = m_spDatabase->OpenTableLC(TPtrC(IAP));
  115.     CleanupStack::Pop();
  116.     CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
  117.     AUTO_POP_DEL(pUtils);
  118.     // Now that we have a table view...we will navigate it...
  119.     TInt err = m_spTable->GotoFirstRecord();
  120.     while (err == KErrNone)
  121.     {
  122. // Get the Id of this record...
  123. TUint32 id = 0;
  124. m_spTable->ReadUintL(TPtrC(COMMDB_ID), id);
  125. // Get the nave of this record...
  126. HBufC *name = NULL;
  127. name = m_spTable->ReadLongTextLC(TPtrC(COMMDB_NAME));
  128. AUTO_POP_DEL(name);
  129. CHXString nameStr = CHXAvStringUtils::DescToString(name->Des());
  130. // Get the service id...
  131. TUint32 iapService = 0;
  132. m_spTable->ReadUintL(TPtrC(IAP_SERVICE), iapService);
  133. // Save these values in the list...
  134. AccessPointInfoPtr info = new (ELeave) AccessPointInfo;
  135. info->id = id;
  136. info->service = iapService;
  137. info->name = nameStr;
  138.     
  139. TBool exists = pUtils->IAPExistsL(id);
  140. if (exists)
  141.     info->wapId = pUtils->WapIdFromIapIdL(id);
  142. m_accessPoints->AddTail((void *)info);
  143. // Advance to the next record...
  144. err = m_spTable->GotoNextRecord();
  145.     }
  146. }
  147. /*
  148.  * GetAPInfo
  149.  * ---------
  150.  * Return true if internet AP exists
  151.  *
  152.  */
  153. bool
  154. CHXAvAccessPointDB::IsValidL(TUint32 iapId)
  155. {
  156.     CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
  157.     AUTO_POP_DEL(pUtils);
  158.     return pUtils->IAPExistsL(iapId);
  159. }
  160. /*
  161.  * GetAPInfo
  162.  * ---------
  163.  * Returns the info struct of the record by it's id.
  164.  *
  165.  */
  166. AccessPointInfoPtr
  167. CHXAvAccessPointDB::GetAPInfo(TUint32 iapId)
  168. {
  169.     LISTPOSITION pos = m_accessPoints->GetHeadPosition();
  170.     while (pos != NULL)
  171.     {
  172. AccessPointInfoPtr info = (AccessPointInfoPtr)(m_accessPoints->GetNext(pos));
  173. if (info->id == iapId)
  174.     return info;
  175.     }
  176.     return NULL;
  177. }
  178. /*
  179.  * ClearAccessPointsList
  180.  * ---------------------
  181.  * Clear the list.
  182.  *
  183.  */
  184. void
  185. CHXAvAccessPointDB::ClearAccessPointsList()
  186. {
  187.     LISTPOSITION pos = NULL;
  188.     pos = m_accessPoints->GetHeadPosition();
  189.     while (pos != NULL)
  190.     {
  191. AccessPointInfoPtr info = (AccessPointInfoPtr)(m_accessPoints->GetNext(pos));
  192. delete info;
  193.     }
  194.     m_accessPoints->RemoveAll();
  195. }
  196. /*
  197.  * AllocAccessPointNameL
  198.  * ---------------------
  199.  * Get the name given the access point id.
  200.  *
  201.  */
  202. HBufC* 
  203. CHXAvAccessPointDB::AllocAccessPointNameL(TUint32 iapId)
  204. {
  205.     CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
  206.     AUTO_POP_DEL(pUtils);
  207. //    AccessPointInfoPtr info = GetAPInfo(iapId);
  208.   //  HX_ASSERT(info != NULL);
  209.     
  210.     HBufC* pbuff = HBufC::NewL(KModifiableTextLength);
  211.     AUTO_PUSH_POP(pbuff); 
  212.     TPtr ptr = pbuff->Des();
  213.     TRAPD(err, pUtils->NameL(GetWapIdFromAPIdL(iapId), ptr));
  214.     
  215.     return pbuff;
  216. }
  217. /* 
  218.  * SupportsInternetAccessL
  219.  * ------------------
  220.  * Return true if given wap ap id supports IP connections
  221.  *
  222.  */
  223. bool
  224. CHXAvAccessPointDB::SupportsInternetAccessL(TUint32 wapApId)
  225. {
  226.     HX_ASSERT(wapApId);
  227.     bool bSupportsInternet = false;
  228.     if(wapApId != 0)
  229.     {
  230.         CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
  231.         AUTO_POP_DEL(pUtils);
  232.         TCommsDbIspType ispType;
  233.         pUtils->ISPTypeL(wapApId, ispType);
  234.         bSupportsInternet = (EIspTypeInternetOnly == ispType || EIspTypeInternetAndWAP == ispType);
  235.     }
  236.     return bSupportsInternet;
  237. }
  238. TUint32 CHXAvAccessPointDB::GetAPIdFromWapIdL(TUint32 wapApId)
  239. {    
  240.     TUint32 iapId = 0;
  241.     if(wapApId != 0)
  242.     {
  243.         CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
  244.         AUTO_POP_DEL(pUtils);
  245.         iapId = pUtils->IapIdFromWapIdL(wapApId);
  246.     }
  247.     return iapId;
  248. }
  249. TUint32 CHXAvAccessPointDB::GetWapIdFromAPIdL(TUint32 iapId)
  250. {
  251.     TUint32 wapApId = 0;
  252.     if(iapId != 0)
  253.     {
  254.         CApUtils* pUtils = CApUtils::NewLC(*m_spDatabase);
  255.         AUTO_POP_DEL(pUtils);
  256.         wapApId = pUtils->WapIdFromIapIdL(iapId);
  257.     }
  258.     return wapApId;
  259. }