telephonyserver/etelmultimode/DTsy/mmtsyconference.cpp
changeset 0 3553901f7fa8
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 1997-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 // CONFERENCE.CPP
       
    15 // 
       
    16 //
       
    17 
       
    18 
       
    19 #include "mmtsy.h"
       
    20 #include "testdef.h"
       
    21 #include "ETELMM.H"
       
    22 #include <et_clsvr.h>
       
    23 #include "Dmmlog.h"
       
    24 
       
    25 CMobileConferenceCallDMmTsy* CMobileConferenceCallDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac,const TDesC& aName)
       
    26 	{
       
    27 	CMobileConferenceCallDMmTsy* This=new(ELeave) CMobileConferenceCallDMmTsy(aPhone,aFac,aName);
       
    28 	CleanupStack::PushL(This);
       
    29 	This->ConstructL();
       
    30 	CleanupStack::Pop();
       
    31 	return This;
       
    32 	}
       
    33 
       
    34 CMobileConferenceCallDMmTsy::CMobileConferenceCallDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac,const TDesC& aName) :
       
    35 	CSubSessionExtDummyBase(aFac), iPhone(aPhone), iNotifyCapsChange(0),iNotifyConferenceStatusChange(0),
       
    36 		iNotifyConferenceEvent(0)
       
    37 	{
       
    38 	iConferenceName = aName;
       
    39 	}
       
    40 
       
    41 void CMobileConferenceCallDMmTsy::ConstructL()
       
    42 	{
       
    43 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy created"));
       
    44 	}
       
    45 
       
    46 CMobileConferenceCallDMmTsy::~CMobileConferenceCallDMmTsy()
       
    47 	{
       
    48 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy destroyed"));
       
    49 	}
       
    50 
       
    51 CTelObject* CMobileConferenceCallDMmTsy::OpenNewObjectByNameL(const TDesC& /*aName*/)
       
    52 	{
       
    53 	User::Leave(KErrNotSupported);
       
    54 	return NULL;
       
    55 	}
       
    56 
       
    57 CTelObject* CMobileConferenceCallDMmTsy::OpenNewObjectL(TDes& /*aNewName*/)
       
    58 	{
       
    59 	User::Leave(KErrNotSupported);
       
    60 	return NULL;
       
    61 	}
       
    62 
       
    63 
       
    64 CTelObject::TReqMode CMobileConferenceCallDMmTsy::ReqModeL(const TInt aIpc)
       
    65 	{
       
    66 	CTelObject::TReqMode ret=0;
       
    67 	switch (aIpc)
       
    68 		{
       
    69 
       
    70 		case EMobileConferenceCallGetCaps:
       
    71 		case EMobileConferenceCallCreateConference:
       
    72 		case EMobileConferenceCallAddCall:
       
    73 		case EMobileConferenceCallSwap:
       
    74 		case EMobileConferenceCallHangUp:
       
    75 		case EMobileConferenceCallEnumerateCalls:
       
    76 		case EMobileConferenceCallGetMobileCallInfo:
       
    77 		case EMobileConferenceCallGetConferenceStatus:
       
    78 
       
    79 		break;
       
    80 
       
    81 //
       
    82 // Flow Controlled Services
       
    83 //
       
    84 
       
    85 //
       
    86 // Multiple Completion Services with Immediate Server Repost
       
    87 // (Usually Notifications)
       
    88 //
       
    89 		case EMobileConferenceCallNotifyCapsChange:
       
    90 		case EMobileConferenceCallNotifyConferenceStatusChange:
       
    91 		case EMobileConferenceCallNotifyConferenceEvent:
       
    92 
       
    93 			ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
       
    94 			break;
       
    95 //
       
    96 // Cancel Requests
       
    97 //	
       
    98 		case EMobileConferenceCallNotifyCapsChangeCancel:
       
    99 		case EMobileConferenceCallCreateConferenceCancel:
       
   100 		case EMobileConferenceCallAddCallCancel:
       
   101 		case EMobileConferenceCallSwapCancel:
       
   102 		case EMobileConferenceCallHangUpCancel:
       
   103 		case EMobileConferenceCallNotifyConferenceStatusChangeCancel:
       
   104 		case EMobileConferenceCallNotifyConferenceEventCancel:
       
   105 		default:
       
   106 		User::Leave(KErrNotSupported);
       
   107 		break;
       
   108 		}
       
   109 	return ret;
       
   110 	}
       
   111 
       
   112 void CMobileConferenceCallDMmTsy::Init()
       
   113 	{
       
   114 
       
   115 	}
       
   116 
       
   117 TInt CMobileConferenceCallDMmTsy::RegisterNotification(const TInt aIpc)
       
   118 	{
       
   119 	switch (aIpc)
       
   120 		{
       
   121 	case EMobileConferenceCallNotifyCapsChange:
       
   122 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: RegisterNotification - Notify Caps Change "));
       
   123 		return KErrNone;
       
   124 	case EMobileConferenceCallNotifyConferenceStatusChange:
       
   125 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: RegisterNotification - Notify Conference Status Change "));
       
   126 		return KErrNone;
       
   127 	case EMobileConferenceCallNotifyConferenceEvent:
       
   128 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: RegisterNotification - Notify Conference Event "));
       
   129 		return KErrNone;
       
   130 	default:
       
   131 		// Unknown or invalid IPC
       
   132 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: Register error, unknown IPC"));
       
   133 		return KErrNotSupported;
       
   134 		}
       
   135 	}
       
   136 
       
   137 TInt CMobileConferenceCallDMmTsy::DeregisterNotification(const TInt aIpc)
       
   138 	{
       
   139 	switch (aIpc)
       
   140 		{
       
   141 	case EMobileConferenceCallNotifyCapsChange:
       
   142 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: DeregisterNotification - Notify Caps Change "));
       
   143 		return KErrNone;
       
   144 	case EMobileConferenceCallNotifyConferenceStatusChange:
       
   145 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: DeregisterNotification - Notify Conference Status Change "));
       
   146 		return KErrNone;
       
   147 	case EMobileConferenceCallNotifyConferenceEvent:
       
   148 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: DeregisterNotification - Notify Conference Event "));
       
   149 		return KErrNone;
       
   150 	default:
       
   151 		// Unknown or invalid IPC
       
   152 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: Deregister error, unknown IPC"));
       
   153 		return KErrNotSupported;
       
   154 		}
       
   155 	}
       
   156 
       
   157 TInt CMobileConferenceCallDMmTsy::NumberOfSlotsL(const TInt aIpc)
       
   158 	{
       
   159 	TInt numberOfSlots=1;
       
   160 	switch (aIpc)
       
   161 		{
       
   162 	case EMobileConferenceCallNotifyCapsChange:
       
   163 	case EMobileConferenceCallNotifyConferenceStatusChange:
       
   164 	case EMobileConferenceCallNotifyConferenceEvent:
       
   165 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: Registered with 2 slot"));
       
   166 		numberOfSlots=2;
       
   167 		break;
       
   168 	default:
       
   169 		// Unknown or invalid Phone IPC
       
   170 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy: Number of Slots error, unknown IPC"));
       
   171 		User::Leave(KErrNotSupported);
       
   172 		break;
       
   173 		} 
       
   174 	return numberOfSlots;
       
   175 	}
       
   176 
       
   177 TInt CMobileConferenceCallDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,const TDataPackage& aPackage)
       
   178 	{
       
   179 	TAny* dataPtr=aPackage.Ptr1();
       
   180 
       
   181 	switch (aIpc)
       
   182 		{
       
   183 		case EMobileConferenceCallGetCaps:
       
   184 			return GetCaps(aTsyReqHandle,REINTERPRET_CAST(TUint32*,dataPtr));
       
   185 		case EMobileConferenceCallNotifyCapsChange:
       
   186 			return NotifyCapsChange(aTsyReqHandle,REINTERPRET_CAST(TUint32*,dataPtr));
       
   187 		case EMobileConferenceCallCreateConference:
       
   188 			return CreateConference(aTsyReqHandle);
       
   189 		case EMobileConferenceCallAddCall:
       
   190 			return AddCall(aTsyReqHandle,aPackage.Des1u());
       
   191 		case EMobileConferenceCallSwap:
       
   192 			return Swap(aTsyReqHandle);
       
   193 		case EMobileConferenceCallHangUp:
       
   194 			return HangUp(aTsyReqHandle);
       
   195 		case EMobileConferenceCallEnumerateCalls:
       
   196 			return EnumerateCalls(aTsyReqHandle,REINTERPRET_CAST(TUint*,dataPtr));
       
   197 		case EMobileConferenceCallGetMobileCallInfo:
       
   198 			return GetMobileCallInfo(aTsyReqHandle,REINTERPRET_CAST(TInt*,dataPtr),aPackage.Des2n());
       
   199 		case EMobileConferenceCallGetConferenceStatus:
       
   200 			return GetConferenceStatus(aTsyReqHandle,REINTERPRET_CAST(RMobileConferenceCall::TMobileConferenceStatus*,dataPtr));
       
   201 		case EMobileConferenceCallNotifyConferenceStatusChange:
       
   202 			return NotifyConferenceStatusChange(aTsyReqHandle,REINTERPRET_CAST(RMobileConferenceCall::TMobileConferenceStatus*,dataPtr));
       
   203 		case EMobileConferenceCallNotifyConferenceEvent:
       
   204 			return NotifyConferenceEvent(aTsyReqHandle,REINTERPRET_CAST(RMobileConferenceCall::TMobileConferenceEvent*,dataPtr),aPackage.Des2u());
       
   205 
       
   206 		default:
       
   207 			return KErrGeneral;
       
   208 		}
       
   209 	}
       
   210 
       
   211 
       
   212 TInt CMobileConferenceCallDMmTsy::CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle)
       
   213 	{
       
   214 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy: - CancelService called"));
       
   215 	switch (aIpc)
       
   216 		{
       
   217 		case EMobileConferenceCallNotifyCapsChange:
       
   218 			return NotifyCapsChangeCancel(aTsyReqHandle);
       
   219 		case EMobileConferenceCallCreateConference:
       
   220 			return CreateConferenceCancel(aTsyReqHandle);
       
   221 		case EMobileConferenceCallAddCall:
       
   222 			return AddCallCancel(aTsyReqHandle);
       
   223 		case EMobileConferenceCallSwap:
       
   224 			return SwapCancel(aTsyReqHandle);
       
   225 		case EMobileConferenceCallHangUp:
       
   226 			return HangUpCancel(aTsyReqHandle);
       
   227 		case EMobileConferenceCallNotifyConferenceStatusChange:
       
   228 			return NotifyConferenceStatusChangeCancel(aTsyReqHandle);
       
   229 		case EMobileConferenceCallNotifyConferenceEvent:
       
   230 			return NotifyConferenceEventCancel(aTsyReqHandle);
       
   231 
       
   232 		default:
       
   233 			return KErrGeneral;
       
   234 		}
       
   235 	}
       
   236 
       
   237 TInt CMobileConferenceCallDMmTsy::GetCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
       
   238 	{
       
   239 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::GetCaps Called"));
       
   240 	*aCaps = DMMTSY_CONFERENCE_CAPS;
       
   241 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   242 	return KErrNone;
       
   243 	}
       
   244 
       
   245 TInt CMobileConferenceCallDMmTsy::NotifyCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
       
   246 	{
       
   247 	if (!iNotifyCapsChange++)
       
   248 		{
       
   249 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy::NotifyCapsChange Called"));
       
   250 		*aCaps = DMMTSY_CONFERENCE_CAPS;
       
   251 		iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   252 		}
       
   253 	return KErrNone;
       
   254 	}
       
   255 
       
   256 TInt CMobileConferenceCallDMmTsy::NotifyCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
       
   257 	{
       
   258 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::NotifyCapsChangeCancel Called"));
       
   259 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   260 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   261 	return KErrNone;
       
   262 	}
       
   263 
       
   264 TInt CMobileConferenceCallDMmTsy::CreateConference(const TTsyReqHandle aTsyReqHandle)
       
   265 	{
       
   266 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::CreateConference Called"));
       
   267 	iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   268 	return KErrNone;
       
   269 	}
       
   270 
       
   271 TInt CMobileConferenceCallDMmTsy::CreateConferenceCancel(const TTsyReqHandle aTsyReqHandle)
       
   272 	{
       
   273 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::CreateConferenceCancel Called"));
       
   274 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   275 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   276 	return KErrNone;
       
   277 	}
       
   278 
       
   279 TInt CMobileConferenceCallDMmTsy::AddCall(const TTsyReqHandle aTsyReqHandle, TDes* aCallName)
       
   280 	{
       
   281 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::AddCall Called"));
       
   282 	if (aCallName->Compare(DMMTSY_CONFERENCE_CALL_NAME) != 0)
       
   283 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   284 	else
       
   285 		iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   286 	return KErrNone;
       
   287 	}
       
   288 
       
   289 TInt CMobileConferenceCallDMmTsy::AddCallCancel(const TTsyReqHandle aTsyReqHandle)
       
   290 	{
       
   291 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::AddCallCancel Called"));
       
   292 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   293 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   294 	return KErrNone;
       
   295 	}
       
   296 
       
   297 TInt CMobileConferenceCallDMmTsy::Swap(const TTsyReqHandle aTsyReqHandle)
       
   298 	{
       
   299 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::Swap Called"));
       
   300 	iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   301 	return KErrNone;
       
   302 	}
       
   303 
       
   304 TInt CMobileConferenceCallDMmTsy::SwapCancel(const TTsyReqHandle aTsyReqHandle)
       
   305 	{
       
   306 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::SwapCancel Called"));
       
   307 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   308 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   309 	return KErrNone;
       
   310 	}
       
   311 
       
   312 TInt CMobileConferenceCallDMmTsy::HangUp(const TTsyReqHandle aTsyReqHandle)
       
   313 	{
       
   314 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::HangUp Called"));
       
   315 	iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   316 	return KErrNone;
       
   317 	}
       
   318 
       
   319 TInt CMobileConferenceCallDMmTsy::HangUpCancel(const TTsyReqHandle aTsyReqHandle)
       
   320 	{
       
   321 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::HangUpCancel Called"));
       
   322 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   323 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   324 	return KErrNone;
       
   325 	}
       
   326 
       
   327 TInt CMobileConferenceCallDMmTsy::EnumerateCalls(const TTsyReqHandle aTsyReqHandle, TUint* aCount)
       
   328 	{
       
   329 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::EnumerateCalls Called"));
       
   330 	*aCount = DMMTSY_CONFERENCE_CALL_COUNT;
       
   331 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   332 	return KErrNone;
       
   333 	}
       
   334 
       
   335 TInt CMobileConferenceCallDMmTsy::GetMobileCallInfo(const TTsyReqHandle aTsyReqHandle, TInt *aIndex, TDes8* aCallInfo)
       
   336 	{
       
   337 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::GetMobileCallInfo Called"));
       
   338 	if (*aIndex != DMMTSY_CONFERENCE_CALL_INDEX)
       
   339 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   340 	else
       
   341 		{
       
   342 		RMobileCall::TMobileCallInfoV1Pckg* ciPckg = STATIC_CAST(RMobileCall::TMobileCallInfoV1Pckg*,aCallInfo);
       
   343 		RMobileCall::TMobileCallInfoV1& ci = (*ciPckg)();
       
   344 
       
   345 		ci.iCallName = DMMTSY_CONFERENCE_CALL_NAME;
       
   346 		ci.iLineName = DMMTSY_CONFERENCE_CALL_LINE;
       
   347 
       
   348 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   349 		}
       
   350 	return KErrNone;
       
   351 	}
       
   352 
       
   353 TInt CMobileConferenceCallDMmTsy::GetConferenceStatus(const TTsyReqHandle aTsyReqHandle, RMobileConferenceCall::TMobileConferenceStatus* aStatus)
       
   354 	{
       
   355 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::GetConferenceStatus Called"));
       
   356 	*aStatus = DMMTSY_CONFERENCE_CALL_STATUS;
       
   357 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   358 	return KErrNone;
       
   359 	}
       
   360 
       
   361 TInt CMobileConferenceCallDMmTsy::NotifyConferenceStatusChange(const TTsyReqHandle aTsyReqHandle, RMobileConferenceCall::TMobileConferenceStatus* aStatus)
       
   362 	{
       
   363 	if (!iNotifyConferenceStatusChange++)
       
   364 		{
       
   365 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy::NotifyConferenceStatusChange Called"));
       
   366 		*aStatus = DMMTSY_CONFERENCE_CALL_STATUS;
       
   367 		iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   368 		}
       
   369 	return KErrNone;
       
   370 	}
       
   371 
       
   372 TInt CMobileConferenceCallDMmTsy::NotifyConferenceStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
       
   373 	{
       
   374 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::NotifyConferenceStatusChangeCancel Called"));
       
   375 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   376 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   377 	return KErrNone;	
       
   378 	}
       
   379 
       
   380 TInt CMobileConferenceCallDMmTsy::NotifyConferenceEvent(const TTsyReqHandle aTsyReqHandle, RMobileConferenceCall::TMobileConferenceEvent* aEvent, TDes* aCallName)
       
   381 	{
       
   382 	if (!iNotifyConferenceEvent++)
       
   383 		{
       
   384 		LOGTEXT(_L8("CMobileConferenceCallDMmTsy::NotifyConferenceEvent Called"));
       
   385 		*aEvent = DMMTSY_CONFERENCE_CALL_EVENT;
       
   386 		*aCallName = DMMTSY_CONFERENCE_CALL_NAME;
       
   387 		iPhone->AddDelayedReq(aTsyReqHandle,this);
       
   388 		}
       
   389 	return KErrNone;
       
   390 	}
       
   391 
       
   392 TInt CMobileConferenceCallDMmTsy::NotifyConferenceEventCancel(const TTsyReqHandle aTsyReqHandle)
       
   393 	{
       
   394 	LOGTEXT(_L8("CMobileConferenceCallDMmTsy::NotifyConferenceEventCancel Called"));
       
   395 	iPhone->RemoveDelayedReq(aTsyReqHandle);
       
   396 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
   397 	return KErrNone;
       
   398 	}
       
   399