syncmlfw/ds/hostserver/dshostserverbase/src/Nsmldshostsession.cpp
branchRCL_3
changeset 61 b183ec05bd8c
parent 19 86979fe66c4c
child 62 19bba8228ff0
equal deleted inserted replaced
59:13d7c31c74e0 61:b183ec05bd8c
    28 #include <SmlDataFormat.h>
    28 #include <SmlDataFormat.h>
    29 
    29 
    30 #include "NSmlAdapterLog.h"
    30 #include "NSmlAdapterLog.h"
    31 #include "nsmldshostconstants.h"
    31 #include "nsmldshostconstants.h"
    32 #include "Nsmldshostserver.h"
    32 #include "Nsmldshostserver.h"
    33 #include "Nsmldshostsessioncanceleventhandler.h"
       
    34 #include "Nsmldshostsessioncancel.h"
       
    35 #include "Nsmldshostsession.h"
    33 #include "Nsmldshostsession.h"
    36 #include "nsmldsdpinformation.h"
    34 #include "nsmldsdpinformation.h"
    37 #include "Nsmldsdataproviderarray.h"
    35 #include "Nsmldsdataproviderarray.h"
    38 
    36 
    39 #ifdef __HOST_SERVER_MTEST__
    37 #ifdef __HOST_SERVER_MTEST__
   174 	{
   172 	{
   175 	_DBG_FILE( "CNSmlDSHostSession::~CNSmlDSHostSession(): begin" );
   173 	_DBG_FILE( "CNSmlDSHostSession::~CNSmlDSHostSession(): begin" );
   176     iMemPtr.iChunk.Close();
   174     iMemPtr.iChunk.Close();
   177     iDataProviders.ResetAndDestroy();
   175     iDataProviders.ResetAndDestroy();
   178     iStringPool.Close();
   176     iStringPool.Close();
   179     if(iDsoDeleteAll)
       
   180       {
       
   181       delete iDsoDeleteAll;
       
   182       iDsoDeleteAll = NULL;
       
   183       }   
       
   184     if(iCancelEventHandler)
       
   185         {
       
   186         delete iCancelEventHandler;
       
   187         iCancelEventHandler = NULL;
       
   188         }
       
   189     REComSession::FinalClose();
   177     REComSession::FinalClose();
   190     iServer.DecSessionCount();
   178     iServer.DecSessionCount();
   191 	_DBG_FILE( "CNSmlDSHostSession::~CNSmlDSHostSession(): end" );
   179 	_DBG_FILE( "CNSmlDSHostSession::~CNSmlDSHostSession(): end" );
   192 	}
   180 	}
   193 
   181 
   420 // ------------------------------------------------------------------------------------------------
   408 // ------------------------------------------------------------------------------------------------
   421 void CNSmlDSHostSession::ConstructL()
   409 void CNSmlDSHostSession::ConstructL()
   422 	{
   410 	{
   423 	_DBG_FILE( "CNSmlDSHostSession::ConstructL(): begin" );
   411 	_DBG_FILE( "CNSmlDSHostSession::ConstructL(): begin" );
   424     iStringPool.OpenL();
   412     iStringPool.OpenL();
   425 	iDsoDeleteAll = NULL;
       
   426 	iCancelEventHandler = NULL;
       
   427 	_DBG_FILE( "CNSmlDSHostSession::ConstructL(): end" );
   413 	_DBG_FILE( "CNSmlDSHostSession::ConstructL(): end" );
   428 	}
   414 	}
   429 	
   415 	
   430 
   416 
   431 // ------------------------------------------------------------------------------------------------
   417 // ------------------------------------------------------------------------------------------------
   867     	{
   853     	{
   868     	User::Leave( KErrAlreadyExists );
   854     	User::Leave( KErrAlreadyExists );
   869     	}
   855     	}
   870     
   856     
   871     CNSmlDSAsyncCallBackForOpen* p = new ( ELeave ) CNSmlDSAsyncCallBackForOpen( 
   857     CNSmlDSAsyncCallBackForOpen* p = new ( ELeave ) CNSmlDSAsyncCallBackForOpen( 
   872     	this, aMessage, OpenFinishedL );
   858     	this, aMessage, &CNSmlDSHostSession::OpenFinishedL );
   873     CleanupStack::PushL( p );
   859     CleanupStack::PushL( p );
   874     
   860     
   875     p->iDpi = DataProviderItemL( aMessage.Int0() );
   861     p->iDpi = DataProviderItemL( aMessage.Int0() );
   876     CSmlDataProvider* dp = p->iDpi->iDataprovider;
   862     CSmlDataProvider* dp = p->iDpi->iDataprovider;
   877     TMemPtr& memptr( MemPtrL() );
   863     TMemPtr& memptr( MemPtrL() );
  1036     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1022     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1037    
  1023    
  1038     RArray<TInt>* resultArray = new ( ELeave ) RArray<TInt>;
  1024     RArray<TInt>* resultArray = new ( ELeave ) RArray<TInt>;
  1039     CleanupStack::PushL( resultArray );
  1025     CleanupStack::PushL( resultArray );
  1040     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1026     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1041     	this, dsi, aMessage, CommitBatchRequestFinishedL, resultArray );
  1027     	this, dsi, aMessage, &CNSmlDSHostSession::CommitBatchRequestFinishedL, resultArray );
  1042     CleanupStack::Pop( resultArray ); //dsao takes ownership
  1028     CleanupStack::Pop( resultArray ); //dsao takes ownership
  1043     
  1029     
  1044     CleanupStack::PushL( dsao );
  1030     CleanupStack::PushL( dsao );
  1045     dsao->CallDSAsyncLC().CommitBatchL( *resultArray, dsao->iStatus );
  1031     dsao->CallDSAsyncLC().CommitBatchL( *resultArray, dsao->iStatus );
  1046     CleanupStack::Pop( 2 ); //CallDSAsyncLC(), dsao
  1032     CleanupStack::Pop( 2 ); //CallDSAsyncLC(), dsao
  1174     {
  1160     {
  1175     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1161     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1176     CNSmlServerDSHostItem* dshi = DataStoreItemParamsLC();
  1162     CNSmlServerDSHostItem* dshi = DataStoreItemParamsLC();
  1177     
  1163     
  1178     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1164     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1179     	this, dsi, aMessage, OpenItemRequestFinishedL, dshi );
  1165     	this, dsi, aMessage, &CNSmlDSHostSession::OpenItemRequestFinishedL, dshi );
  1180     CleanupStack::Pop( dshi ); //dsao takes ownership
  1166     CleanupStack::Pop( dshi ); //dsao takes ownership
  1181     CleanupStack::PushL( dsao );
  1167     CleanupStack::PushL( dsao );
  1182     
  1168     
  1183     dsao->CallDSAsyncLC().OpenItemL( 
  1169     dsao->CallDSAsyncLC().OpenItemL( 
  1184     	dshi->Uid(), dshi->FieldChange(), dshi->Size(), dshi->ParentUid(), 
  1170     	dshi->Uid(), dshi->FieldChange(), dshi->Size(), dshi->ParentUid(), 
  1256 void CNSmlDSHostSession::CreateItemL( const RMessage2& aMessage )
  1242 void CNSmlDSHostSession::CreateItemL( const RMessage2& aMessage )
  1257     {
  1243     {
  1258     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1244     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1259     CNSmlServerDSHostItem* dshi = DataStoreItemParamsLC();
  1245     CNSmlServerDSHostItem* dshi = DataStoreItemParamsLC();
  1260     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1246     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1261     	this, dsi, aMessage, CreateItemRequestFinishedL, dshi );
  1247     	this, dsi, aMessage, &CNSmlDSHostSession::CreateItemRequestFinishedL, dshi );
  1262     CleanupStack::Pop( dshi ); //dsao takes ownership
  1248     CleanupStack::Pop( dshi ); //dsao takes ownership
  1263     CleanupStack::PushL( dsao );
  1249     CleanupStack::PushL( dsao );
  1264     
  1250     
  1265     TSmlDbItemUid* uid = NULL;
  1251     TSmlDbItemUid* uid = NULL;
  1266 
  1252 
  1393 void CNSmlDSHostSession::CommitItemL( const RMessage2& aMessage )
  1379 void CNSmlDSHostSession::CommitItemL( const RMessage2& aMessage )
  1394 	{
  1380 	{
  1395     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1381     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1396 
  1382 
  1397     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1383     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1398     	this, dsi, aMessage, CommitItemRequestFinishedL );
  1384     	this, dsi, aMessage, &CNSmlDSHostSession::CommitItemRequestFinishedL );
  1399     CleanupStack::PushL( dsao );
  1385     CleanupStack::PushL( dsao );
  1400     dsao->CallDSAsyncLC().CommitItemL( dsao->iStatus );
  1386     dsao->CallDSAsyncLC().CommitItemL( dsao->iStatus );
  1401     CleanupStack::Pop(2); //CallDSAsyncLC, dsao
  1387     CleanupStack::Pop(2); //CallDSAsyncLC, dsao
  1402 	}
  1388 	}
  1403 
  1389 
  1498 // CNSmlDSHostSession::DeleteAllItemsL
  1484 // CNSmlDSHostSession::DeleteAllItemsL
  1499 // Deletes all items at Data Store permanently.
  1485 // Deletes all items at Data Store permanently.
  1500 // ------------------------------------------------------------------------------------------------	
  1486 // ------------------------------------------------------------------------------------------------	
  1501 void CNSmlDSHostSession::DeleteAllItemsL( const RMessage2& aMessage )
  1487 void CNSmlDSHostSession::DeleteAllItemsL( const RMessage2& aMessage )
  1502 	{
  1488 	{
  1503     //Create cancel event handler
       
  1504     iCancelEventHandler = CNSmlHostSessionCancel::NewL(this);
       
  1505     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1489     TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1506     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( this, dsi, aMessage, DeleteAllFinishedL );
  1490     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( this, dsi, aMessage );
  1507     CleanupStack::PushL( dsao );
  1491     CleanupStack::PushL( dsao );
  1508     dsao->CallDSAsyncLC().DeleteAllItemsL( dsao->iStatus );   
  1492     dsao->CallDSAsyncLC().DeleteAllItemsL( dsao->iStatus );
  1509     CleanupStack::Pop(2); //CallDSAsyncLC(), dsao
  1493     CleanupStack::Pop(2); //CallDSAsyncLC(), dsao
  1510     iDsoDeleteAll = dsao;
       
  1511 	}
  1494 	}
  1512 
  1495 
  1513 // ------------------------------------------------------------------------------------------------
  1496 // ------------------------------------------------------------------------------------------------
  1514 // CNSmlDSHostSession::HasSyncHistoryL
  1497 // CNSmlDSHostSession::HasSyncHistoryL
  1515 // Checks if the Data Store has sync history. If not then slow sync is proposed to Sync Partner.
  1498 // Checks if the Data Store has sync history. If not then slow sync is proposed to Sync Partner.
  1637 void CNSmlDSHostSession::AllItemsL( const RMessage2& aMessage )
  1620 void CNSmlDSHostSession::AllItemsL( const RMessage2& aMessage )
  1638 	{
  1621 	{
  1639 	TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1622 	TNSmlDSDataStoreElement* dsi = DataStoreItemL( aMessage );
  1640 	
  1623 	
  1641     CNSmlDSChangedItemsFetcher* dsao = CNSmlDSChangedItemsFetcher::NewLC( 
  1624     CNSmlDSChangedItemsFetcher* dsao = CNSmlDSChangedItemsFetcher::NewLC( 
  1642     	this, dsi, aMessage, AllItemsRequestFinishedL );
  1625     	this, dsi, aMessage, &CNSmlDSHostSession::AllItemsRequestFinishedL );
  1643     dsao->FetchAllChangedItemsL();
  1626     dsao->FetchAllChangedItemsL();
  1644     CleanupStack::Pop(); //dsao
  1627     CleanupStack::Pop(); //dsao
  1645 	}
  1628 	}
  1646 
  1629 
  1647 // ------------------------------------------------------------------------------------------------
  1630 // ------------------------------------------------------------------------------------------------
  1688     RReadStream& readStream = ptr.ReadStreamLC();
  1671     RReadStream& readStream = ptr.ReadStreamLC();
  1689     dius->InternalizeL( readStream );
  1672     dius->InternalizeL( readStream );
  1690     CleanupStack::PopAndDestroy(); //readStream
  1673     CleanupStack::PopAndDestroy(); //readStream
  1691     
  1674     
  1692     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1675     CNSmlDSAsyncCallBack* dsao = new ( ELeave ) CNSmlDSAsyncCallBack( 
  1693     	this, dsi, aMessage, CommitChangesRequestFinishedL, dius );
  1676     	this, dsi, aMessage, &CNSmlDSHostSession::CommitChangesRequestFinishedL, dius );
  1694     CleanupStack::Pop( dius ); //dsao takes the ownership.
  1677     CleanupStack::Pop( dius ); //dsao takes the ownership.
  1695     CleanupStack::PushL( dsao );
  1678     CleanupStack::PushL( dsao );
  1696     dsao->CallDSAsyncLC().CommitChangeInfoL( dsao->iStatus, *dius );
  1679     dsao->CallDSAsyncLC().CommitChangeInfoL( dsao->iStatus, *dius );
  1697     CleanupStack::Pop(2); //CallDSAsyncLC(), dsao
  1680     CleanupStack::Pop(2); //CallDSAsyncLC(), dsao
  1698 	}
  1681 	}
  1906 	wStream.WriteL( *aSb->iRead );
  1889 	wStream.WriteL( *aSb->iRead );
  1907 	wStream.CommitL();
  1890 	wStream.CommitL();
  1908 	CleanupStack::PopAndDestroy(); //wStream
  1891 	CleanupStack::PopAndDestroy(); //wStream
  1909 	}
  1892 	}
  1910 
  1893 
  1911 // ------------------------------------------------------------------------------------------------
       
  1912 // CNSmlDSHostSession::HandleCancelEventL
       
  1913 // called when user canceled the operation
       
  1914 // ------------------------------------------------------------------------------------------------ 
       
  1915 void CNSmlDSHostSession::HandleCancelEventL()
       
  1916     {
       
  1917     if(iCancelEventHandler)
       
  1918         {
       
  1919         iDsoDeleteAll->Cancel();
       
  1920         }
       
  1921     }
       
  1922 
       
  1923 // ------------------------------------------------------------------------------------------------
       
  1924 // CNSmlDSHostSession::DeleteAllFinishedL
       
  1925 // called when DeleteAll request is finished.
       
  1926 // Note! when aOperation is CNSmlDSAsyncCallBack::ECanceled or CNSmlDSAsyncCallBack::EFree, 
       
  1927 // aDSAO->iDSItem might be NULL.
       
  1928 // ------------------------------------------------------------------------------------------------ 
       
  1929 TInt CNSmlDSHostSession::DeleteAllFinishedL( CNSmlDSAsyncCallBack* aDSAO, TCallBackOperation aOperation )
       
  1930     {
       
  1931     TInt err( aDSAO->iStatus.Int() );
       
  1932 
       
  1933     switch( aOperation )
       
  1934         {
       
  1935         case CNSmlDSAsyncCallBack::EFinished:
       
  1936         case CNSmlDSAsyncCallBack::ECanceled:
       
  1937         case CNSmlDSAsyncCallBack::EFree:
       
  1938             {
       
  1939             if(iCancelEventHandler)
       
  1940                 {
       
  1941                 delete iCancelEventHandler;
       
  1942                 iCancelEventHandler = NULL;
       
  1943                 iDsoDeleteAll = NULL;
       
  1944                 }
       
  1945             break;
       
  1946             }
       
  1947         default:
       
  1948             User::Leave( KErrUnknown );
       
  1949         };
       
  1950 
       
  1951     return err;
       
  1952     }
       
  1953 // End of File
  1894 // End of File