17 |
17 |
18 |
18 |
19 // INCLUDE FILES |
19 // INCLUDE FILES |
20 #include <s32file.h> |
20 #include <s32file.h> |
21 #include <f32file.h> |
21 #include <f32file.h> |
22 #include "drmcommon.h" |
22 #include "DRMCommon.h" |
23 #include "DRMClockSession.h" |
23 #include "DRMClockSession.h" |
24 #include "drmclockclientserver.h" |
24 #include "drmclockclientserver.h" |
25 #include "DRMClockServer.h" |
25 #include "DRMClockServer.h" |
26 #include <DrmTypes.h> |
26 #include <DRMTypes.h> |
27 |
27 |
28 #include <e32test.h> |
28 #include <e32test.h> |
29 |
29 |
30 #include "drmlog.h" |
30 #include "drmlog.h" |
31 |
31 |
32 // NAMESPACES |
32 // NAMESPACES |
33 using namespace DRMClock; |
33 using namespace DRMClock; |
34 |
34 |
35 // EXTERNAL DATA STRUCTURES |
35 // EXTERNAL DATA STRUCTURES |
36 // EXTERNAL FUNCTION PROTOTYPES |
36 // EXTERNAL FUNCTION PROTOTYPES |
37 // CONSTANTS |
37 // CONSTANTS |
38 |
38 |
39 |
39 |
40 // MACROS |
40 // MACROS |
41 |
41 |
56 // ----------------------------------------------------------------------------- |
56 // ----------------------------------------------------------------------------- |
57 // CDRMClockSession::NewL |
57 // CDRMClockSession::NewL |
58 // Two-phased constructor. |
58 // Two-phased constructor. |
59 // ----------------------------------------------------------------------------- |
59 // ----------------------------------------------------------------------------- |
60 // |
60 // |
61 CDRMClockSession* CDRMClockSession::NewL( CDRMClock* aClock) |
61 CDRMClockSession* CDRMClockSession::NewL( CDRMClock* aClock) |
62 { |
62 { |
63 CDRMClockSession* self = new( ELeave ) CDRMClockSession( aClock ); |
63 CDRMClockSession* self = new( ELeave ) CDRMClockSession( aClock ); |
64 CleanupStack::PushL( self ); |
64 CleanupStack::PushL( self ); |
65 self->ConstructL(); |
65 self->ConstructL(); |
66 CleanupStack::Pop(); // self |
66 CleanupStack::Pop(); // self |
86 // |
86 // |
87 void CDRMClockSession::ServiceL( const RMessage2& aMessage ) |
87 void CDRMClockSession::ServiceL( const RMessage2& aMessage ) |
88 { |
88 { |
89 DRMLOG( _L( "CDRMClockSession::ServiceL called" ) ); |
89 DRMLOG( _L( "CDRMClockSession::ServiceL called" ) ); |
90 // Trap possible errors... |
90 // Trap possible errors... |
91 |
91 |
92 TRAPD( error, DispatchL( aMessage ) ); |
92 TRAPD( error, DispatchL( aMessage ) ); |
93 |
93 |
94 if ( error ) |
94 if ( error ) |
95 { |
95 { |
96 DRMLOG2( _L( "CDRMClockSession::DispatcL threw an exception %d" ), error ); |
96 DRMLOG2( _L( "CDRMClockSession::DispatcL threw an exception %d" ), error ); |
97 // ...and complete the request in case of an error. |
97 // ...and complete the request in case of an error. |
98 aMessage.Complete( error ); |
98 aMessage.Complete( error ); |
106 // ----------------------------------------------------------------------------- |
106 // ----------------------------------------------------------------------------- |
107 // CDRMClockSession::CDRMClockSession |
107 // CDRMClockSession::CDRMClockSession |
108 // Default constructor. |
108 // Default constructor. |
109 // ----------------------------------------------------------------------------- |
109 // ----------------------------------------------------------------------------- |
110 // |
110 // |
111 CDRMClockSession::CDRMClockSession( CDRMClock* aClock ) : |
111 CDRMClockSession::CDRMClockSession( CDRMClock* aClock ) : |
112 // Base class' constructor is called first. |
112 // Base class' constructor is called first. |
113 iDRMClock( aClock ) |
113 iDRMClock( aClock ) |
114 { |
114 { |
115 // Nothing. |
115 // Nothing. |
116 } |
116 } |
117 |
117 |
118 // ----------------------------------------------------------------------------- |
118 // ----------------------------------------------------------------------------- |
119 // CDRMClockSession::ConstructL |
119 // CDRMClockSession::ConstructL |
120 // Second phase constructor. Initializes the log tool in DRM internal testing. |
120 // Second phase constructor. Initializes the log tool in DRM internal testing. |
121 // ----------------------------------------------------------------------------- |
121 // ----------------------------------------------------------------------------- |
122 // |
122 // |
124 { |
124 { |
125 } |
125 } |
126 |
126 |
127 // ----------------------------------------------------------------------------- |
127 // ----------------------------------------------------------------------------- |
128 // CDRMClockSession::DispatchL |
128 // CDRMClockSession::DispatchL |
129 // Checks which command the user requested, and forwards the request to |
129 // Checks which command the user requested, and forwards the request to |
130 // appropriate private method. This helps to keep the code more readable. |
130 // appropriate private method. This helps to keep the code more readable. |
131 // ----------------------------------------------------------------------------- |
131 // ----------------------------------------------------------------------------- |
132 // |
132 // |
133 void CDRMClockSession::DispatchL( const RMessage2& aMessage ) |
133 void CDRMClockSession::DispatchL( const RMessage2& aMessage ) |
134 { |
134 { |
135 switch ( aMessage.Function() ) |
135 switch ( aMessage.Function() ) |
136 { |
136 { |
137 case EGetDRMTime: |
137 case EGetDRMTime: |
138 GetDRMTimeL( aMessage ); |
138 GetDRMTimeL( aMessage ); |
154 { |
154 { |
155 DRMLOG( _L( "CDRMClockSession::GetDRMTimeL" ) ); |
155 DRMLOG( _L( "CDRMClockSession::GetDRMTimeL" ) ); |
156 TTime drmTime; |
156 TTime drmTime; |
157 TInt timeZone; |
157 TInt timeZone; |
158 DRMClock::ESecurityLevel level; |
158 DRMClock::ESecurityLevel level; |
159 |
159 |
160 iDRMClock->GetSecureTime( drmTime, timeZone, level ); |
160 iDRMClock->GetSecureTime( drmTime, timeZone, level ); |
161 |
161 |
162 TPckg<TTime> package(drmTime); |
162 TPckg<TTime> package(drmTime); |
163 TPckg<TInt> package2(timeZone); |
163 TPckg<TInt> package2(timeZone); |
164 TPckg<DRMClock::ESecurityLevel> package3(level); |
164 TPckg<DRMClock::ESecurityLevel> package3(level); |
165 |
165 |
166 IPCWRITE0L( package ); |
166 IPCWRITE0L( package ); |
167 IPCWRITE1L( package2 ); |
167 IPCWRITE1L( package2 ); |
168 IPCWRITE2L( package3 ); |
168 IPCWRITE2L( package3 ); |
169 |
169 |
170 aMessage.Complete( KErrNone ); |
170 aMessage.Complete( KErrNone ); |
176 // |
176 // |
177 void CDRMClockSession::UpdateDRMTimeL( const RMessage2& aMessage ) |
177 void CDRMClockSession::UpdateDRMTimeL( const RMessage2& aMessage ) |
178 { |
178 { |
179 DRMLOG( _L( "CDRMClockSession::UpdateDRMTimeL" ) ); |
179 DRMLOG( _L( "CDRMClockSession::UpdateDRMTimeL" ) ); |
180 TInt error = KErrNone; |
180 TInt error = KErrNone; |
181 TTime drmTime; |
181 TTime drmTime; |
182 TInt timeZone; |
182 TInt timeZone; |
183 TPckg<TTime> package( drmTime ); |
183 TPckg<TTime> package( drmTime ); |
184 TPckg<TInt> package2( timeZone ); |
184 TPckg<TInt> package2( timeZone ); |
185 TInt r = KErrAccessDenied; |
185 TInt r = KErrAccessDenied; |
186 |
186 |
187 // Add a check for the vendor id |
187 // Add a check for the vendor id |
188 _LIT_SECURITY_POLICY_V0(vidCheck, VID_DEFAULT); // Check Default VID |
188 _LIT_SECURITY_POLICY_V0(vidCheck, VID_DEFAULT); // Check Default VID |
189 _LIT_SECURITY_POLICY_C1(drmCheck, ECapabilityDRM); |
189 _LIT_SECURITY_POLICY_C1(drmCheck, ECapabilityDRM); |
190 RThread client; |
190 RThread client; |
191 |
191 |
192 aMessage.ClientL( client ); |
192 aMessage.ClientL( client ); |
193 |
193 |
194 if( vidCheck.CheckPolicy( client ) || drmCheck().CheckPolicy(client) ) |
194 if( vidCheck.CheckPolicy( client ) || drmCheck().CheckPolicy(client) ) |
195 { |
195 { |
196 r = KErrNone; |
196 r = KErrNone; |
197 } |
197 } |
198 |
198 |
199 client.Close(); |
199 client.Close(); |
200 User::LeaveIfError( r ); |
200 User::LeaveIfError( r ); |
201 |
201 |
202 IPCREAD0L( package ); |
202 IPCREAD0L( package ); |
203 IPCREAD1L( package2 ); |
203 IPCREAD1L( package2 ); |
204 |
204 |
205 TRAP( error, iDRMClock->ResetSecureTimeL( drmTime, timeZone ) ); |
205 TRAP( error, iDRMClock->ResetSecureTimeL( drmTime, timeZone ) ); |
206 |
206 |