|
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 /** |
|
17 @file |
|
18 @internalAll |
|
19 */ |
|
20 |
|
21 #ifndef __CPACKETSERVICESDISPATCHER_H_ |
|
22 #define __CPACKETSERVICESDISPATCHER_H_ |
|
23 |
|
24 // INCLUDES |
|
25 #include <e32std.h> |
|
26 #include <e32base.h> |
|
27 #include <e32def.h> |
|
28 #include <etelmm.h> |
|
29 #include <etelpckt.h> |
|
30 #include <etelqos.h> |
|
31 #include <ctsy/serviceapi/cmmutility.h> |
|
32 |
|
33 #include <ctsy/ltsy/mltsydispatchfactory.h> |
|
34 #include "requestqueueoneshot.h" |
|
35 #include <ctsy/ltsy/ltsylogger.h> |
|
36 #include "mdispatchercallback.h" |
|
37 |
|
38 const TInt KPrimaryAndSecondaryDNSLength = 16; |
|
39 const TUint KPasswordUsernameHeaderLength = 7; |
|
40 const TUint KIPCRequestCode = 1; |
|
41 const TUint KRequestID = 0; |
|
42 const TUint KIDLength = 3; |
|
43 const TUint KMaxUserAndPassLength = 80; |
|
44 const TUint KMaxPdpAddressLength = 50; |
|
45 const TUint KPrimaryAndSecondaryDNSID = 0xC023; |
|
46 const TUint KUsenamePasswordDNSID = 0x8021; |
|
47 const TUint KIndicatePrimaryAddress = 0x81; |
|
48 const TUint KIndicateSecondaryAddress = 0x83; |
|
49 const TUint KPacketLengthMSB = 0x0; |
|
50 const TUint KDnsAddressLength = 6; |
|
51 _LIT(KEmptyInfoName, ""); |
|
52 |
|
53 const TInt KHeaderGap = 8; // Offsets for decoding PCO buffer |
|
54 const TInt KIPv4Len = 4; // Offsets for decoding PCO buffer |
|
55 const TInt KLengthLocation = 4;// Offsets for decoding PCO buffer |
|
56 const TInt KMinPCOSize = 3; // Minimum PCO buffer size as set in 3G TS 24.008 spec |
|
57 |
|
58 // FORWARD DECLARATIONS |
|
59 class CMmDataPackage; |
|
60 class MmMessageManagerCallback; |
|
61 class TDispatcherHolder; |
|
62 |
|
63 class MLtsyDispatchPacketServicesPacketAttach; |
|
64 class MLtsyDispatchPacketServicesGetPacketAttachMode; |
|
65 class MLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus; |
|
66 class MLtsyDispatchPacketServicesPacketDetach; |
|
67 class MLtsyDispatchPacketServicesSetPdpContextConfig; |
|
68 class MLtsyDispatchPacketServicesModifyActivePdpContext; |
|
69 class MLtsyDispatchPacketServicesInitialisePdpContext; |
|
70 class MLtsyDispatchPacketServicesDeletePdpContext; |
|
71 class MLtsyDispatchPacketServicesSetPacketAttachMode; |
|
72 class MLtsyDispatchPacketServicesNotifyPacketStatusChange; |
|
73 class MLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams; |
|
74 class MLtsyDispatchPacketServicesSetDefaultPdpContextR99R4Params; |
|
75 class MLtsyDispatchPacketServicesActivatePdpContext; |
|
76 class MLtsyDispatchPacketServicesSetPdpContextQosGprs; |
|
77 class MLtsyDispatchPacketServicesSetPdpContextQosR99R4; |
|
78 class MLtsyDispatchPacketServicesSetPdpContextQosR5; |
|
79 class MLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest; |
|
80 class MLtsyDispatchPacketServicesDeactivatePdpContext; |
|
81 class MLtsyDispatchPacketServicesAddPacketFilter; |
|
82 class MLtsyDispatchPacketServicesGetStatus; |
|
83 class MLtsyDispatchPacketServicesGetStaticCapabilities; |
|
84 class MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists; |
|
85 class MLtsyDispatchPacketServicesGetMaxNoActiveServices; |
|
86 class MLtsyDispatchPacketServicesInitialiseMbmsContext; |
|
87 class MLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus; |
|
88 class MLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList; |
|
89 class MLtsyDispatchPacketServicesUpdateMbmsSessionList; |
|
90 class MLtsyDispatchPacketServicesRemovePacketFilter; |
|
91 |
|
92 // CLASS DECLARATION |
|
93 |
|
94 /** |
|
95 * This class is responsible for packing and unpacking data belonging |
|
96 * to PacketServices related requests to the Licensee LTSY. |
|
97 */ |
|
98 class CPacketServicesDispatcher : public CBase, public MDispatcherCallback |
|
99 { |
|
100 public: |
|
101 |
|
102 virtual ~CPacketServicesDispatcher(); |
|
103 |
|
104 static CPacketServicesDispatcher* NewL( |
|
105 MLtsyDispatchFactoryV1& aLtsyFactory, |
|
106 MmMessageManagerCallback& aMessageManagerCallback, |
|
107 CRequestQueueOneShot& aRequestAsyncOneShot); |
|
108 |
|
109 static CPacketServicesDispatcher* NewLC( |
|
110 MLtsyDispatchFactoryV1& aLtsyFactory, |
|
111 MmMessageManagerCallback& aMessageManagerCallback, |
|
112 CRequestQueueOneShot& aRequestAsyncOneShot); |
|
113 |
|
114 // Dispatcher functions for dispatching requests DOWN to the Licensee LTSY |
|
115 |
|
116 TInt DispatchPacketAttachL(); |
|
117 TInt DispatchGetPacketAttachModeL(const CMmDataPackage* aDataPackage); |
|
118 TInt DispatchGetStatusL(); |
|
119 TInt DispatchGetPacketNetworkRegistrationStatusL(); |
|
120 TInt DispatchPacketDetachL(); |
|
121 TInt DispatchSetPdpContextConfigL(const CMmDataPackage* aDataPackage); |
|
122 TInt DispatchModifyActivePdpContextL(const CMmDataPackage* aDataPackage); |
|
123 TInt DispatchInitialisePdpContextL(const CMmDataPackage* aDataPackage); |
|
124 TInt DispatchDeletePdpContextL(const CMmDataPackage* aDataPackage); |
|
125 TInt DispatchSetPacketAttachModeL(const CMmDataPackage* aDataPackage); |
|
126 TInt DispatchSetDefaultPdpContextParamsL(const CMmDataPackage* aDataPackage); |
|
127 TInt DispatchActivatePdpContextL(const CMmDataPackage* aDataPackage); |
|
128 TInt DispatchSetPdpContextQosL(const CMmDataPackage* aDataPackage); |
|
129 TInt DispatchRejectNetworkInitiatedContextActivationRequestL(); |
|
130 TInt DispatchDeactivatePdpContextL(const CMmDataPackage* aDataPackage); |
|
131 TInt DispatchAddPacketFilterL(const CMmDataPackage* aDataPackage); |
|
132 TInt DispatchRemovePacketFilterL(const CMmDataPackage* aDataPackage); |
|
133 TInt DispatchGetStaticCapabilitiesL(); |
|
134 TInt DispatchGetMaxNoMonitoredServiceListsL(); |
|
135 TInt DispatchGetMaxNoActiveServicesL(); |
|
136 TInt DispatchInitialiseMbmsContextL(const CMmDataPackage* aDataPackage); |
|
137 TInt DispatchGetMbmsNetworkServiceStatusL(const CMmDataPackage* aDataPackage); |
|
138 TInt DispatchUpdateMbmsMonitorServiceListL(const CMmDataPackage* aDataPackage); |
|
139 TInt DispatchUpdateMbmsSessionListL(const CMmDataPackage* aDataPackage); |
|
140 |
|
141 // Complete functions for receiving completions UP from the Licensee LTSY |
|
142 // via the CCtsyDispatcherCallback object. |
|
143 |
|
144 void CallbackNotifyPacketAttachModeChange(TInt aError, RPacketService::TPreferredBearer aBearer); |
|
145 void CallbackNotifyQosProfileChange(TInt aError, const TDesC& aContextName, const RPacketQoS::TQoSGPRSNegotiated& aQoSGPRSNegotiated); |
|
146 void CallbackNotifyQosProfileChange(TInt aError, const TDesC& aContextName, const RPacketQoS::TQoSR99_R4Negotiated& aQoSR99_R4Negotiated); |
|
147 void CallbackNotifyQosProfileChange(TInt aError, const TDesC& aContextName, const RPacketQoS::TQoSR5Negotiated& aQoSR5Negotiated); |
|
148 void CallbackNotifyRatTransferCapsChange(TInt aError, TDynamicTransferCapsFlags aCaps); |
|
149 void CallbackNotifyPacketMsClassChange(TInt aError, RPacketService::TMSClass aMSClass); |
|
150 void CallbackNotifyPacketDynamicCapsChange(TInt aError, TBool aGprsIsSupportedOnCell, TBool aCsServicesIsSupportedOnCell); |
|
151 void CallbackNotifyPdpContextAdded(TInt aError, const TDesC& aContextName); |
|
152 void CallbackNotifyNetworkInitiatedContextActivationRequest(TInt aError, const RPacketContext::TContextConfigGPRS& aContextConfigGPRS); |
|
153 void CallbackNotifyNetworkInitiatedContextActivationRequest(TInt aError, const RPacketContext::TContextConfigR99_R4& aContextConfigR99_R4); |
|
154 void CallbackNotifyNetworkInitiatedContextActivationRequest(TInt aError, const RPacketContext::TContextConfig_R5& aContextConfig_R5); |
|
155 void CallbackNotifyPdpContextConfigChanged(TInt aError, const TDesC& aContextName, const TDesC8& aAccessPointName, const TDesC8& aPdpAddress, TUint aPdpCompression, const TDesC8& aPcoBuffer); |
|
156 void CallbackNotifyPdpContextStatusChange(TInt aError, const TDesC& aContextName, const TContextMisc& aContextMisc); |
|
157 void CallbackNotifyPdpContextConnectionSpeedChange(TInt aError, const TDesC& aContextName, TUint aConnectionSpeed); |
|
158 void CallbackNotifyPacketNetworkRegistrationStatus(TInt aError, const RPacketService::TRegistrationStatus aRegistrationStatus); |
|
159 void CallbackNotifyMbmsContextConfigChanged(TInt aError, const TDesC& aContextName, const RPacketMbmsContext::TContextConfigMbmsV1& aContextConfigMbms); |
|
160 void CallbackPacketAttach(TInt aError); |
|
161 void CallbackGetPacketAttachMode(TInt aError, RPacketService::TAttachMode aAttachMode); |
|
162 void CallbackGetPacketNetworkRegistrationStatus(TInt aError, RPacketService::TRegistrationStatus aRegistrationStatus); |
|
163 void CallbackPacketDetach(TInt aError); |
|
164 void CallbackSetPdpContextConfig(TInt aError, const TDesC& aContextName); |
|
165 void CallbackModifyActivePdpContext(TInt aError, const TDesC& aContextName, TInt8 aRejectionCode); |
|
166 void CallbackInitialisePdpContext(TInt aError, const TDesC& aContextName, const TDesC& aChannelId); |
|
167 void CallbackDeletePdpContext(TInt aError, const TDesC& aContextName); |
|
168 void CallbackSetPacketAttachMode(TInt aError); |
|
169 void CallbackNotifyPacketStatusChange(TInt aError); |
|
170 void CallbackSetDefaultPdpContextParams(TInt aError); |
|
171 void CallbackActivatePdpContext(TInt aError, const TDesC& aContextName, const TDesC8& aAccessPointName, RPacketContext::TProtocolType aPdpType); |
|
172 void CallbackSetPdpContextQos(TInt aError, const TDesC& aContextName); |
|
173 void CallbackRejectNetworkInitiatedContextActivationRequest(TInt aError); |
|
174 void CallbackDeactivatePdpContext(TInt aError, const TDesC& aContextName); |
|
175 void CallbackGetStatus(TInt aError, RPacketService::TStatus aPacketStatus, TBool aIsResumed); |
|
176 void CallbackGetStaticCapabilities(TInt aError, TUint aStaticCapabilities); |
|
177 void CallbackGetMaxNoMonitoredServiceLists(TInt aError, TInt aMaxNoMonitoredServiceLists); |
|
178 void CallbackGetMaxNoActiveServices(TInt aError, TInt aMaxNoActiveServices); |
|
179 void CallbackInitialiseMbmsContext(TInt aError, const TDesC& aContextName, const TDesC& aChannelId); |
|
180 void CallbackGetMbmsNetworkServiceStatus(TInt aError, TMbmsNetworkServiceStatus aMbmsNetworkServiceStatus); |
|
181 void CallbackNotifyMbmsNetworkServiceStatusChange(TInt aError, TMbmsNetworkServiceStatus aMbmsNetworkServiceStatus); |
|
182 void CallbackUpdateMbmsMonitorServiceList(TInt aError); |
|
183 void CallbackUpdateMbmsMonitorServiceList(TInt aError, const RArray<TUint>& aFailedServiceIds); |
|
184 void CallbackNotifyMbmsServiceAvailabilityChange(TInt aError, const RArray<TUint>& aAvailableServiceIds); |
|
185 void CallbackUpdateMbmsSessionList(TInt aError, const TDesC& aContextName); |
|
186 void CallbackNotifyConnectionInfoChange(TInt aError, const TDesC& aContextName, const RPacketContext::TConnectionInfoV1& aConnectionInfo); |
|
187 |
|
188 // From MDispatcherCallback |
|
189 void CallbackSync(CRequestQueueOneShot::TIpcDataPackage& aIpcDataPackage); |
|
190 |
|
191 // Other public functions |
|
192 void SetDispatcherHolder(TDispatcherHolder& aDispatcherHolder); |
|
193 |
|
194 private: |
|
195 |
|
196 CPacketServicesDispatcher(MLtsyDispatchFactoryV1& aLtsyFactory, |
|
197 MmMessageManagerCallback& aMessageManagerCallback, |
|
198 CRequestQueueOneShot& aRequestAsyncOneShot); |
|
199 |
|
200 TInt EtelPcktR99R4NegToEtelPcktR97NegQoS(const RPacketQoS::TQoSR99_R4Negotiated& aQoSR99_R4Negotiated, |
|
201 RPacketQoS::TQoSGPRSNegotiated& aQoSGPRSNegotiated); |
|
202 |
|
203 TInt EtelPcktR97NegToEtelPcktR99R4NegQoS(const RPacketQoS::TQoSGPRSNegotiated& aQoSGPRSNegotiated, |
|
204 RPacketQoS::TQoSR99_R4Negotiated& aQoSR99_R4Negotiated); |
|
205 |
|
206 TInt EtelPcktR99R4NegToEtelPcktR5NegQoS(const RPacketQoS::TQoSR99_R4Negotiated& aQoSR99_R4Negotiated, |
|
207 RPacketQoS::TQoSR5Negotiated& aQoSR5Negotiated); |
|
208 |
|
209 void ConvertDNSToPCOBuffer (const TDes8& aPrimaryDNS, const TDes8& aSecondaryDNS, const TUint8 aRequestID, TDes8& aFormatPcoBufferAddr); |
|
210 void ConvertUsernameAndPasswordToPCOBuffer(const TDes8& aUsername, const TDes8& aPassword, const TUint8 aRequestID, TDes8& aFormatedBuffer); |
|
211 |
|
212 void DecodePCO(const RPacketContext::TMiscProtocolBuffer& aPcoBuffer, RPacketContext::TAuthData& aUsername, RPacketContext::TAuthData& aPassword, RPacketContext::TProtocolAddress& aPrimaryDNS, RPacketContext::TProtocolAddress& aSecondaryDNS, RPacketContext::TMiscProtocolBuffer& aMiscBuffer); |
|
213 |
|
214 CPcktMbmsMonitoredServiceList* CreateServiceListL(const RArray<TUint>& aServiceIds) const; |
|
215 |
|
216 |
|
217 void ConstructL(); |
|
218 |
|
219 |
|
220 |
|
221 private: // Not owned |
|
222 |
|
223 MLtsyDispatchFactoryV1& iLtsyFactoryV1; |
|
224 MmMessageManagerCallback& iMessageManagerCallback; |
|
225 CRequestQueueOneShot& iRequestAsyncOneShot; |
|
226 TDispatcherHolder* iDispatcherHolder; |
|
227 |
|
228 // Interfaces in the Licensee LTSY, not owned by this object |
|
229 |
|
230 MLtsyDispatchPacketServicesPacketAttach* iLtsyDispatchPacketServicesPacketAttach; |
|
231 MLtsyDispatchPacketServicesGetPacketAttachMode* iLtsyDispatchPacketServicesGetPacketAttachMode; |
|
232 MLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus* iLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatus; |
|
233 MLtsyDispatchPacketServicesPacketDetach* iLtsyDispatchPacketServicesPacketDetach; |
|
234 MLtsyDispatchPacketServicesSetPdpContextConfig* iLtsyDispatchPacketServicesSetPdpContextConfig; |
|
235 MLtsyDispatchPacketServicesModifyActivePdpContext* iLtsyDispatchPacketServicesModifyActivePdpContext; |
|
236 MLtsyDispatchPacketServicesInitialisePdpContext* iLtsyDispatchPacketServicesInitialisePdpContext; |
|
237 MLtsyDispatchPacketServicesDeletePdpContext* iLtsyDispatchPacketServicesDeletePdpContext; |
|
238 MLtsyDispatchPacketServicesSetPacketAttachMode* iLtsyDispatchPacketServicesSetPacketAttachMode; |
|
239 MLtsyDispatchPacketServicesNotifyPacketStatusChange* iLtsyDispatchPacketServicesNotifyPacketStatusChange; |
|
240 MLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams* iLtsyDispatchPacketServicesSetDefaultPdpContextGprsParams; |
|
241 MLtsyDispatchPacketServicesSetDefaultPdpContextR99R4Params* iLtsyDispatchPacketServicesSetDefaultPdpContextR99R4Params; |
|
242 MLtsyDispatchPacketServicesActivatePdpContext* iLtsyDispatchPacketServicesActivatePdpContext; |
|
243 MLtsyDispatchPacketServicesSetPdpContextQosGprs* iLtsyDispatchPacketServicesSetPdpContextQosGprs; |
|
244 MLtsyDispatchPacketServicesSetPdpContextQosR99R4* iLtsyDispatchPacketServicesSetPdpContextQosR99R4; |
|
245 MLtsyDispatchPacketServicesSetPdpContextQosR5* iLtsyDispatchPacketServicesSetPdpContextQosR5; |
|
246 MLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest* iLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequest; |
|
247 MLtsyDispatchPacketServicesDeactivatePdpContext* iLtsyDispatchPacketServicesDeactivatePdpContext; |
|
248 MLtsyDispatchPacketServicesAddPacketFilter* iLtsyDispatchPacketServicesAddPacketFilter; |
|
249 MLtsyDispatchPacketServicesGetStatus* iLtsyDispatchPacketServicesGetStatus; |
|
250 MLtsyDispatchPacketServicesGetStaticCapabilities* iLtsyDispatchPacketServicesGetStaticCapabilities; |
|
251 MLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists* iLtsyDispatchPacketServicesGetMaxNoMonitoredServiceLists; |
|
252 MLtsyDispatchPacketServicesGetMaxNoActiveServices* iLtsyDispatchPacketServicesGetMaxNoActiveServices; |
|
253 MLtsyDispatchPacketServicesInitialiseMbmsContext* iLtsyDispatchPacketServicesInitialiseMbmsContext; |
|
254 MLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus* iLtsyDispatchPacketServicesGetMbmsNetworkServiceStatus; |
|
255 MLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList* iLtsyDispatchPacketServicesUpdateMbmsMonitorServiceList; |
|
256 MLtsyDispatchPacketServicesUpdateMbmsSessionList* iLtsyDispatchPacketServicesUpdateMbmsSessionList; |
|
257 MLtsyDispatchPacketServicesRemovePacketFilter* iLtsyDispatchPacketServicesRemovePacketFilter; |
|
258 |
|
259 }; // class CPacketServicesDispatcher |
|
260 |
|
261 #endif // __CPACKETSERVICESDISPATCHER_H_ |
|
262 |