15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 |
18 |
19 // INCLUDE FILES |
19 // INCLUDE FILES |
20 #include "cphsrvsubsessionextcall.h" |
20 #include "CPhSrvSubSessionExtCall.h" |
21 #include "cphsrvsession.h" |
21 #include "CPhSrvSession.h" |
22 #include "cphsrvserver.h" |
22 #include "CPhSrvServer.h" |
23 #include "mphsrvobjectnegotiators.h" |
23 #include "MPhSrvObjectNegotiators.h" |
24 |
24 |
25 // Hash mark |
25 // Hash mark |
26 _LIT( KPhoneHash, "#" ); |
26 _LIT( KPhoneHash, "#" ); |
27 |
27 |
28 // dtmf chars |
28 // dtmf chars |
91 CmdSubSessionCloseL( aMessage ); |
91 CmdSubSessionCloseL( aMessage ); |
92 permissionStatus = ETrue; |
92 permissionStatus = ETrue; |
93 break; |
93 break; |
94 case EPhoneServerExtCallSubSessionMakeCall: |
94 case EPhoneServerExtCallSubSessionMakeCall: |
95 CreateCallArgsL( aMessage ); |
95 CreateCallArgsL( aMessage ); |
96 // Checks if telephone number contains dtmf string |
96 // Checks if telephone number contains dtmf string |
97 dtmfNumber = IsDtmfPhoneNumber( iCallArgs->TelephoneNumber()); |
97 dtmfNumber = IsDtmfPhoneNumber( iCallArgs->TelephoneNumber()); |
98 if ( !dtmfNumber ) |
98 if ( !dtmfNumber ) |
99 { |
99 { |
100 // Checks if telephone number is USSD/SS string |
100 // Checks if telephone number is USSD/SS string |
101 isSSUssd = ( iCallArgs->TelephoneNumber().Right( KPhoneHash().Length() ) == KPhoneHash ); |
101 isSSUssd = ( iCallArgs->TelephoneNumber().Right( KPhoneHash().Length() ) == KPhoneHash ); |
102 if ( isSSUssd ) |
102 if ( isSSUssd ) |
103 { |
103 { |
104 // Capabilities needed if USSD/SS string |
104 // Capabilities needed if USSD/SS string |
105 hasCapNetworkControlAndServices = aMessage.HasCapability( ECapabilityNetworkControl, |
105 hasCapNetworkControlAndServices = aMessage.HasCapability( ECapabilityNetworkControl, |
106 ECapabilityNetworkServices ); |
106 ECapabilityNetworkServices ); |
107 hasCapWriteAndReadDeviceData = aMessage.HasCapability( ECapabilityReadDeviceData, ECapabilityWriteDeviceData ); |
107 hasCapWriteAndReadDeviceData = aMessage.HasCapability( ECapabilityReadDeviceData, ECapabilityWriteDeviceData ); |
108 hasUssdSSCaps = hasCapNetworkControlAndServices && hasCapWriteAndReadDeviceData; |
108 hasUssdSSCaps = hasCapNetworkControlAndServices && hasCapWriteAndReadDeviceData; |
109 } |
109 } |
110 } |
110 } |
111 if ( ( hasCapNetworkServices && !isSSUssd ) || hasUssdSSCaps ) |
111 if ( ( hasCapNetworkServices && !isSSUssd ) || hasUssdSSCaps ) |
112 { |
112 { |
113 CmdSubSessionMakeCallL( aMessage ); |
113 CmdSubSessionMakeCallL( aMessage ); |
114 permissionStatus = ETrue; |
114 permissionStatus = ETrue; |
115 } |
115 } |
158 // call requests. |
158 // call requests. |
159 // ----------------------------------------------------------------------------- |
159 // ----------------------------------------------------------------------------- |
160 // |
160 // |
161 void CPhSrvSubSessionExtCall::CmdSubSessionMakeCallL( |
161 void CPhSrvSubSessionExtCall::CmdSubSessionMakeCallL( |
162 const RMessage2& aMessage ) |
162 const RMessage2& aMessage ) |
163 { |
163 { |
164 |
164 |
165 // Submit a new request to the call manager |
165 // Submit a new request to the call manager |
166 MPhSrvNegotiatorCall& callNegotiator = PhoneSession().PhoneServer( |
166 MPhSrvNegotiatorCall& callNegotiator = PhoneSession().PhoneServer( |
167 ).CallNegotiatorL(); |
167 ).CallNegotiatorL(); |
168 callNegotiator.NegotiatorDialL( aMessage, *iCallArgs, *this ); |
168 callNegotiator.NegotiatorDialL( aMessage, *iCallArgs, *this ); |
192 // ----------------------------------------------------------------------------- |
192 // ----------------------------------------------------------------------------- |
193 // |
193 // |
194 void CPhSrvSubSessionExtCall::CreateCallArgsL( const RMessage2& aMessage ) |
194 void CPhSrvSubSessionExtCall::CreateCallArgsL( const RMessage2& aMessage ) |
195 { |
195 { |
196 HBufC8* package = HBufC8::NewLC( aMessage.Int1() ); |
196 HBufC8* package = HBufC8::NewLC( aMessage.Int1() ); |
197 TPtr8 calldata( package->Des() ); |
197 TPtr8 calldata( package->Des() ); |
198 PhoneSession().Read( |
198 PhoneSession().Read( |
199 aMessage, |
199 aMessage, |
200 0, |
200 0, |
201 calldata ); |
201 calldata ); |
202 |
202 |
203 iCallArgs = CPhCltExtPhoneDialData::NewL( *package ); |
203 iCallArgs = CPhCltExtPhoneDialData::NewL( *package ); |
204 CleanupStack::PopAndDestroy( package ); |
204 CleanupStack::PopAndDestroy( package ); |
205 } |
205 } |
206 |
206 |
207 // ----------------------------------------------------------------------------- |
207 // ----------------------------------------------------------------------------- |
208 // CPhSrvSubSessionExtCall::IsDtmfPhoneNumber |
208 // CPhSrvSubSessionExtCall::IsDtmfPhoneNumber |
209 // ----------------------------------------------------------------------------- |
209 // ----------------------------------------------------------------------------- |