|
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 } |