servicediscoveryandcontrol/pnp/test/upnp/Server/ServicePoint/src/upnpservicecprstates.cpp
changeset 0 f5a58ecadc66
equal deleted inserted replaced
-1:000000000000 0:f5a58ecadc66
       
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 //Local Includes
       
    17 #include "upnpservicecprstates.h"
       
    18 #include "upnpstatemachine.h"
       
    19 
       
    20 using namespace UPnPServiceCprStates;
       
    21 
       
    22 //-=========================================================
       
    23 //
       
    24 //State Forks
       
    25 //
       
    26 //-=========================================================
       
    27 DEFINE_SMELEMENT ( TServiceOrDeviceTag, NetStateMachine::MStateFork, TContext )
       
    28 TInt TServiceOrDeviceTag::TransitionTag ( )
       
    29 	{
       
    30 	if ( iContext.iMessage.IsMessage<TUpnpMessage::TRegisterService> ( )	
       
    31 		|| iContext.iMessage.IsMessage<TUpnpMessage::TUnregisterService> ( ) )
       
    32 		{
       
    33 		return UPnPStateMachine::KServiceTag;
       
    34 		}
       
    35 	else if  ( iContext.iMessage.IsMessage<TUpnpMessage::TRegisterDevice> ( )
       
    36 		|| iContext.iMessage.IsMessage<TUpnpMessage::TUnregisterDevice> ( ) )
       
    37 		{
       
    38 		return UPnPStateMachine::KDeviceTag;
       
    39 		}
       
    40 	return MeshMachine::KErrorTag;	
       
    41 	}
       
    42 
       
    43 
       
    44 DEFINE_SMELEMENT ( TRootRegisteredOrNoTag, NetStateMachine::MStateFork, TContext )
       
    45 TInt TRootRegisteredOrNoTag::TransitionTag ( )
       
    46 	{
       
    47 	return iContext.Node ( ).IsRootDeviceRegistered ( ) ? UPnPStateMachine::KRootRegisteredTag : MeshMachine::KNoTag;
       
    48 	}
       
    49 	
       
    50 //-=========================================================
       
    51 //
       
    52 //Transitions
       
    53 //
       
    54 //-=========================================================
       
    55 DEFINE_SMELEMENT ( TPerformServiceOrDeviceValidationAndSendResponse, NetStateMachine::MStateTransition, TContext )
       
    56 void TPerformServiceOrDeviceValidationAndSendResponse::DoL ( )
       
    57 	{
       
    58 	TInt err = KErrNone;
       
    59 	if ( iContext.iMessage.IsMessage<TUpnpMessage::TServiceJoinRequest> ( ) )
       
    60 		{
       
    61 		TUpnpMessage::TServiceJoinRequest& joinMsg = message_cast<TUpnpMessage::TServiceJoinRequest>( iContext.iMessage );
       
    62 		
       
    63 		CUPnPServiceRegisterParamSet* paramSet = static_cast<CUPnPServiceRegisterParamSet*> ( joinMsg.iParamSet );
       
    64 		CUPnPRootDeviceInfoContainer& container = static_cast <CUPnPRootDeviceInfoContainer&> ( iContext.Node ( ).GetRootDeviceInfoContainer ( ) );
       
    65 		if(!paramSet->DeviceUid( ).Size())
       
    66 			{
       
    67 			paramSet->SetDeviceUidL(container.GetRootdeviceUid());
       
    68 			}
       
    69 		
       
    70 		err = container.PerformValidation ( paramSet->DeviceUid( ), paramSet->Uri( ) );
       
    71 		}
       
    72 	else if ( iContext.iMessage.IsMessage<TUpnpMessage::TDeviceJoinRequest> ( ) )
       
    73 		{
       
    74 		TUpnpMessage::TDeviceJoinRequest& joinMsg = message_cast<TUpnpMessage::TDeviceJoinRequest>( iContext.iMessage );
       
    75 		
       
    76 		CUPnPDeviceRegisterParamSet* paramSet = static_cast<CUPnPDeviceRegisterParamSet*> ( joinMsg.iParamSet );
       
    77 		CUPnPRootDeviceInfoContainer& container = static_cast <CUPnPRootDeviceInfoContainer&> ( iContext.Node ( ).GetRootDeviceInfoContainer ( ) );
       
    78 		if(!paramSet->ParentDeviceUid( ).Size())
       
    79 			{
       
    80 			paramSet->SetParentDeviceUidL(container.GetRootdeviceUid());
       
    81 			}
       
    82 		if ( container.GetDeviceByUuid ( paramSet->ParentDeviceUid( ) )
       
    83 			&& !( container.GetDeviceByUuid ( paramSet->UDN( ) ) ) )
       
    84 			{
       
    85 			err = KErrNone;
       
    86 			}
       
    87 		else
       
    88 			{
       
    89 			err = KErrAlreadyExists;
       
    90 			}
       
    91 		}
       
    92 	
       
    93 	RClientInterface::OpenPostMessageClose ( iContext.NodeId (), address_cast<TNodeCtxId> ( iContext.iSender ), TUpnpMessage::TServiceValidated ( err ).CRef () );
       
    94 	}
       
    95 
       
    96 
       
    97 DEFINE_SMELEMENT ( TAppendServiceInfo, NetStateMachine::MStateTransition, TContext )
       
    98 void TAppendServiceInfo::DoL ( )
       
    99 	{
       
   100 	TUpnpMessage::TRegisterService& msg = message_cast<TUpnpMessage::TRegisterService>( iContext.iMessage );
       
   101 	
       
   102 	CUPnPServiceRegisterParamSet* paramSet = static_cast<CUPnPServiceRegisterParamSet*> ( msg.iParamSet );
       
   103 	CUPnPServiceInfo* serviceInfo = static_cast<CUPnPServiceInfo*> ( msg.iPtr );
       
   104 	
       
   105 	iContext.Node ( ).GetRootDeviceInfoContainer ( ).AppendServiceInfoL ( paramSet->DeviceUid(), serviceInfo );
       
   106 	}
       
   107 
       
   108 
       
   109 DEFINE_SMELEMENT ( TAppendDeviceInfo, NetStateMachine::MStateTransition, TContext )
       
   110 void TAppendDeviceInfo::DoL ( )
       
   111 	{
       
   112 	TUpnpMessage::TRegisterDevice& msg = message_cast<TUpnpMessage::TRegisterDevice>( iContext.iMessage );
       
   113 	
       
   114 	CUPnPDeviceRegisterParamSet* paramSet = static_cast<CUPnPDeviceRegisterParamSet*> ( msg.iParamSet );
       
   115 	CUPnPDevice* device = static_cast<CUPnPDevice*> ( msg.iPtr );
       
   116 	
       
   117 	iContext.Node ( ).GetRootDeviceInfoContainer ( ).AppendEmbeddedDeviceL ( paramSet->ParentDeviceUid( ), device );
       
   118 	}
       
   119 	
       
   120 	
       
   121 DEFINE_SMELEMENT ( TDeleteServiceInfo, NetStateMachine::MStateTransition, TContext )
       
   122 void TDeleteServiceInfo::DoL ( )
       
   123 	{
       
   124 	TUpnpMessage::TUnregisterService& msg = message_cast<TUpnpMessage::TUnregisterService>( iContext.iMessage );
       
   125 	TPtr8 scpdUrl ( const_cast<TUint8*> ( msg.iPtr ), msg.iSize, msg.iSize );
       
   126 	
       
   127 	iContext.Node ( ).GetRootDeviceInfoContainer ( ).DeleteServiceInfoL ( scpdUrl );
       
   128 	}
       
   129 
       
   130 	
       
   131 DEFINE_SMELEMENT ( TDeleteDeviceInfo, NetStateMachine::MStateTransition, TContext )
       
   132 void TDeleteDeviceInfo::DoL ( )
       
   133 	{
       
   134 	TUpnpMessage::TUnregisterDevice& msg = message_cast<TUpnpMessage::TUnregisterDevice>( iContext.iMessage );
       
   135 	TPtr8 deviceUuid ( const_cast<TUint8*> ( msg.iPtr ), msg.iSize, msg.iSize );
       
   136 	
       
   137 	iContext.Node ( ).GetRootDeviceInfoContainer ( ).DeleteDeviceInfoL ( deviceUuid );	
       
   138 	}