cbs/CbsServer/ServerSrc/CCbsMcnSession.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/cbs/CbsServer/ServerSrc/CCbsMcnSession.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,377 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  MCN server-side subsession implementation.
-*
-*                Implementation of MCN topic subscription commits changes (reception 
-*                state, subscribed topics, etc) immediately after every request.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CbsCommon.h"
-#include "CbsServerPanic.h"
-#include "CbsServerConstants.h"
-#include "CCbsMcnSession.h"
-#include "CCbsRecMessage.h"
-#include "CCbsReceiverHelper.h"
-#include "CCbsDbImpSettings.H"
-#include "CCbsRecEtel.h"
-#include "CCbsSession.h"
-#include "CCbsServer.h"
-#include "CbsLogger.h"
-
-// CONSTANTS
-
-/// Initial size of the array holding numbers of subscribed topics.
-const TInt KInitialSpaceForSubscribedTopics = 1;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::CCbsMcnSession
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CCbsMcnSession::CCbsMcnSession( 
-    CCbsSession& aSession, 
-    CCbsRecEtel& aReceiver )
-    : CCbsObject( aSession ), 
-    iReceiver( aReceiver ),
-    iMcnPckg( iMcnMessage )
-    {
-    // Do nothing
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsEtelMessaging::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::ConstructL()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::ConstructL()");
-
-    iSubscribedTopics = new (ELeave) CArrayFixFlat<TUint16>
-        ( KInitialSpaceForSubscribedTopics );
-    iReceiver.AddSubscriptionProviderL( this );
-
-	CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::ConstructL()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsEtelMessaging::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCbsMcnSession* CCbsMcnSession::NewL( 
-    CCbsSession& aSession, 
-    CCbsRecEtel& aReceiver )
-    {
-	CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::NewL()");
-
-    CCbsMcnSession* self = 
-        new (ELeave) CCbsMcnSession( aSession, aReceiver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::NewL()");
-    return self;
-    }
-
-// Destructor
-
-CCbsMcnSession::~CCbsMcnSession()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::~CCbsMcnSession()");
-    TRAP_IGNORE( iReceiver.RemoveSubscriptionProviderL( this ) );
-    delete iSubscribedTopics;
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::~CCbsMcnSession()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::HandleRequestsL
-// Handles MCN client requests.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//  
-TBool CCbsMcnSession::HandleRequestsL( 
-    const RMessage2& aMessage )
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::HandleRequestsL()");
-
-    TBool requestHandled( ETrue );
-
-    switch( aMessage.Function() )
-        {
-        case EMcnNotifyOnChange:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): EMcnNotifyOnChange");
-            NotifyOnChange();
-            break;
-
-        case EMcnCloseSubsession:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): EMcnCloseSubsession");
-            CloseMcnSession();
-            aMessage.Complete( KErrNone );
-            break;
-
-        case EMcnNotifyOnChangeCancel:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): EMcnNotifyOnChangeCancel");
-            NotifyOnChangeCancel();
-            break;
-
-        case EMcnSubscribeTopic:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): EMcnSubscribeTopic");
-            SubscribeTopicL();
-            break;
-
-        case EMcnClearSubscriptions:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): EMcnClearSubscriptions");
-            ClearSubscriptionsL();
-            break;
-
-        case EMcnNoMoreSubscriptions:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): EMcnNoMoreSubscriptions");
-            ApplySubscriptionsL();
-            break;
-
-        default:
-            CBSLOGSTRING("CBSSERVER: CCbsMcnSession::HandleRequestsL(): default");
-            requestHandled = EFalse;
-            break;
-        }
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::HandleRequestsL()");
-
-    return requestHandled;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::NumberOfSubscriptions
-// Returns the number of topic subscriptions of this MCN client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//  
-TUint CCbsMcnSession::NumberOfSubscriptions() const
-    {
-    return iSubscribedTopics->Count();
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::RouteMessageL
-// Routes messages to the subscribed Mcnclients.
-// If the topic of the message is subscribed by the client,
-// aMessage is copied to client-side. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::RouteMessageL( 
-    const CCbsMessage& aMessage )
-    {
-	CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::RouteMessageL()");
-
-	TKeyArrayFix key(0, ECmpTUint16);
-	TInt index;
-    TUint16 topicNumber( aMessage.TopicNumber() );    
-	TInt result( iSubscribedTopics->FindIsq( topicNumber, key, index ) );
-
-
-    TBool isLC( aMessage.IsLivecastMessage() );
-
-    if ( isLC )
-        {
-        iMcnMessage.iBuffer8 = aMessage.Contents8();
-        iMcnMessage.iBuffer = KNullDesC;
-        }
-    else
-        {
-        iMcnMessage.iBuffer = aMessage.Contents();
-        iMcnMessage.iBuffer8 = KNullDesC8;
-        }
-    
-    iMcnMessage.iNetworkMode = aMessage.NetworkMode();
-    iMcnMessage.iTopicNumber = aMessage.TopicNumber();
-
-    CBSLOGSTRING2("CBSSERVER: CCbsMcnSession::RouteMessageL(): topicNumber: %d", iMcnMessage.iTopicNumber );
-    CBSLOGSTRING2("CBSSERVER: CCbsMcnSession::RouteMessageL(): networkMode: %d (0=GSM, 1=WCDMA, 2=Not defined).", iMcnMessage.iNetworkMode );    
-    
-	if ( result == KErrNone )
-		{        
-        CBSLOGSTRING("CBSSERVER: CCbsMcnSession::RouteMessageL(): Notifying client...");
-        NotifyClientL( iMcnPckg );
-        CBSLOGSTRING("CBSSERVER: CCbsMcnSession::RouteMessageL(): Client notified.");
-	    }
-	CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::RouteMessageL()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::CloseMcnSession
-// Close the subsession.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::CloseMcnSession()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::CloseMcnSession()");
-
-    // Removes the object.
-    Session().Server().DeleteObjectByHandle( Message().Int3() );
-
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::CloseMcnSession()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::NotifyOnChange
-// Handles client request for message routing.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//   
-void CCbsMcnSession::NotifyOnChange()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::NotifyOnChange()");
-
-    if ( iIsMessage )
-        {
-        NotifyOnChangeCancel();
-        }
-
-    iMessage = Message();
-    iIsMessage = ETrue;
-
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::NotifyOnChange()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::NotifyOnChangeCancel
-// Handles client request to cancel an outstanding routing request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::NotifyOnChangeCancel()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::NotifyOnChangeCancel()");
-
-    if ( iIsMessage )
-        {
-        iMessage.Complete( KErrCancel );
-        }
-
-    iIsMessage = EFalse;
-    Message().Complete( KErrNone );
-
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::NotifyOnChangeCancel()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::SubscribeTopicL
-// Handles client-side request to subscribe a single topic.
-// An attempt to subscribe the same topic twice does not
-// cause any error - the topic remains subscribed. 
-// Note: ApplySubscriptionL has to be called in order to
-// apply receiver changes.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::SubscribeTopicL()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::SubscribeTopicL()");
-
-    // Read topic number from client.
-    TUint16 topicNumber( 0 );
-    topicNumber = static_cast<TUint16> ( Message().Int0() );
-   
-    // Store the topic number and notify receiver.
-	TKeyArrayFix key(0, ECmpTUint16);
-	TRAPD( err, iSubscribedTopics->InsertIsqL( topicNumber, key ) );
-	if( err != KErrAlreadyExists )
-		{        
-        CBSLOGSTRING2("CBSSERVER: CCbsMcnSession::SubscribeTopicL(), leaving if error != 0: %d", err);
-		User::LeaveIfError( err );
-		}
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::SubscribeTopicL()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::NotifyClientL
-// Called by RouteMessageL() to actually copy the message content
-// to client side.
-// If the client has a CB message routing request pending,
-// the message and topicnumber of the message are given to client side.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::NotifyClientL( 
-    const TPckg<TCbsMcnMessage>& aMcnPckg )
-    {
-	CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::NotifyClientL()");
-
-    if ( iIsMessage )
-        {        
-        CBSLOGSTRING("CBSSERVER: CCbsMcnSession::NotifyClientL(): Writing msg pckg to client...");
-        // Write the message package to client
-		iMessage.WriteL( 0, aMcnPckg );        
-        CBSLOGSTRING("CBSSERVER: CCbsMcnSession::NotifyClientL(): Writing msg pckg to client OK.");
-
-        // Complete the request
-        iMessage.Complete( KErrNone );
-        iIsMessage = EFalse;
-        }
-	CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::NotifyClientL()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::ClearSubscriptionsL
-// Clears all topic subscriptions of this MCN session.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::ClearSubscriptionsL() 
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::ClearSubscriptionsL()");
-
-    iSubscribedTopics->Reset();
-    iReceiver.ApplyStateChangesL();
-    Message().Complete( KErrNone );
-    
-    CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::ClearSubscriptionsL()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsMcnSession::ApplySubscriptionsL
-// Forces receiver to reload CB topic subscriptions.
-// This function has to be called after MCN client has subscribed
-// topics with SubscribeTopicL().
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsMcnSession::ApplySubscriptionsL() 
-    {
-	CBSLOGSTRING("CBSSERVER: >>> CCbsMcnSession::ApplySubscriptionsL()");
-
-    iReceiver.ApplyStateChangesL();
-    Message().Complete( KErrNone );
-
-	CBSLOGSTRING("CBSSERVER: <<< CCbsMcnSession::ApplySubscriptionsL()");
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-//  End of File