telephonyserver/etelserverandcore/DSTDNC/dstdiden.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
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 //
       
    15 
       
    16 #include "dstdiden.h"
       
    17 #include "DDEF.H"
       
    18 #include "didendef.h"
       
    19 
       
    20 //
       
    21 // CCallDstdIden
       
    22 //
       
    23 CCallDstdIden* CCallDstdIden::NewL(CPhoneFactoryDummyBase* aFac)
       
    24 //
       
    25 // Create new instance of CCallDstdIden
       
    26 //
       
    27 	{
       
    28 	CCallDstdIden* call=new(ELeave)CCallDstdIden(aFac);
       
    29 	CleanupStack::PushL(call);
       
    30 	call->ConstructL();
       
    31 	CleanupStack::Pop();
       
    32 	return call;
       
    33 	}
       
    34 
       
    35 CCallDstdIden::CCallDstdIden(CPhoneFactoryDummyBase* aFac)
       
    36 	:CCallDummyBase(aFac)
       
    37 	{}
       
    38 
       
    39 CCallDstdIden::~CCallDstdIden()
       
    40 	{}
       
    41 
       
    42 TInt CCallDstdIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
    43 	{
       
    44 	return KErrNotSupported;
       
    45 	}
       
    46 
       
    47 CTelObject* CCallDstdIden::OpenNewObjectByNameL(const TDesC& /*aName*/)
       
    48 	{
       
    49 	return REINTERPRET_CAST(CTelObject*,CFaxDstdIden::NewL(FacPtr()));
       
    50 	}
       
    51 
       
    52 CTelObject* CCallDstdIden::OpenNewObjectL(TDes& /*aNewName*/)
       
    53 	{
       
    54 	User::Leave(KErrNotSupported);
       
    55 	return NULL;
       
    56 	}
       
    57 
       
    58 CTelObject::TReqMode CCallDstdIden::ReqModeL(const TInt aIpc)
       
    59 //
       
    60 //	Basic Request Mode for Call
       
    61 //
       
    62 	{
       
    63 	CTelObject::TReqMode ret=0;
       
    64 	switch (aIpc)
       
    65 		{
       
    66 	case EEtelCallRecoverDataPort:
       
    67 	case EEtelCallAcquireOwnership:
       
    68 		break;
       
    69 	case EEtelCallNotifyStatusChange:
       
    70 		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
       
    71 		break;
       
    72 	case EEtelCallNotifyHookChange:
       
    73 		ret=KReqModeMultipleCompletionEnabled;
       
    74 		break;
       
    75 
       
    76 	case EEtelCallGetStatus:
       
    77 	case EEtelCallGetCaps:
       
    78 	case EEtelCallLoanDataPort:
       
    79 	case EEtelCallDial:
       
    80 	case EEtelCallConnect:
       
    81 	case EEtelCallAnswer:
       
    82 	case EEtelCallHangUp:
       
    83 	case EEtelCallTransferOwnership:
       
    84 	case EEtelCallGetBearerServiceInfo:
       
    85 	case EEtelCallGetOwnershipStatus:
       
    86 	case EEtelCallGetFaxSettings:
       
    87 	case EEtelCallSetFaxSettings:
       
    88 	case EEtelCallReferenceCount:
       
    89 		ret=KReqModeFlowControlObeyed;
       
    90 		break;
       
    91 	default:
       
    92 		User::Leave(0); // Server error = Should not call this
       
    93 		break;
       
    94 		}
       
    95 	return ret;
       
    96 	}
       
    97 
       
    98 
       
    99 
       
   100 	
       
   101 //
       
   102 //	CFaxDstdIden
       
   103 //
       
   104 CFaxDstdIden* CFaxDstdIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   105 	{
       
   106 	CFaxDstdIden* fax=new(ELeave) CFaxDstdIden(aFac);
       
   107 	CleanupStack::PushL(fax);
       
   108 	fax->ConstructL();
       
   109 	CleanupStack::Pop();
       
   110 	return fax;
       
   111 	}
       
   112 
       
   113 CFaxDstdIden::CFaxDstdIden(CPhoneFactoryDummyBase* aFac)
       
   114 	:CFaxDummyBase(aFac)
       
   115 	{}
       
   116 
       
   117 void CFaxDstdIden::ConstructL()
       
   118 	{
       
   119 	TInt r = iChunk.CreateGlobal(KNullDesC,sizeof (RFax::TProgress), sizeof (RFax::TProgress),EOwnerProcess); 
       
   120 	if (r == KErrNone)
       
   121 		{
       
   122 		RFax::TProgress* progress = new(iChunk.Base()) RFax::TProgress;
       
   123 		progress->iLastUpdateTime = 0;
       
   124 		progress->iAnswerback.Zero ();
       
   125 		progress->iPhase = ENotYetStarted;
       
   126 		progress->iSpeed = 9600;
       
   127 		progress->iResolution = EFaxNormal;
       
   128 		progress->iCompression = EModifiedHuffman;
       
   129 		progress->iECM = 0;
       
   130  		progress->iPage = 0;
       
   131 		progress->iLines = 0;
       
   132 		}	
       
   133 	else
       
   134 		User::Leave(r);
       
   135 	}
       
   136 
       
   137 CFaxDstdIden::~CFaxDstdIden()
       
   138 	{
       
   139 	iChunk.Close();
       
   140 	}
       
   141 
       
   142 RHandleBase* CFaxDstdIden::GlobalKernelObjectHandle()
       
   143 	{
       
   144 		return &iChunk;
       
   145 	}
       
   146 
       
   147 //
       
   148 //	CLineDstdIden
       
   149 //
       
   150 CLineDstdIden* CLineDstdIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   151 	{
       
   152 	CLineDstdIden* line=new(ELeave) CLineDstdIden(aFac);
       
   153 	CleanupStack::PushL(line);
       
   154 	line->ConstructL();
       
   155 	CleanupStack::Pop();
       
   156 	return line;
       
   157 	}
       
   158 
       
   159 CLineDstdIden::CLineDstdIden(CPhoneFactoryDummyBase* aFac)
       
   160 	:CLineDummyBase(aFac)
       
   161 	{
       
   162 	iFac=aFac;
       
   163 	}
       
   164 
       
   165 CLineDstdIden::~CLineDstdIden()
       
   166 	{}
       
   167 
       
   168 TInt CLineDstdIden::EnumerateCall(const TTsyReqHandle aTsyReqHandle,TInt* aCount)
       
   169 	{
       
   170 	*aCount=iNumberOfCalls;
       
   171 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   172 	return KErrNone;
       
   173 	}
       
   174 
       
   175 TInt CLineDstdIden::GetCallInfo(const TTsyReqHandle aTsyReqHandle,TCallInfoIndex* aCallInfo)
       
   176 	{
       
   177 	aCallInfo->iInfo.iStatus=DSTD_CALL_STATUS;
       
   178 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   179 	return KErrNone;
       
   180 	}
       
   181 
       
   182 TInt CLineDstdIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   183 	{
       
   184 	return KErrNotSupported;
       
   185 	}
       
   186 
       
   187 CTelObject* CLineDstdIden::OpenNewObjectByNameL(const TDesC& /*aName*/)
       
   188 	{
       
   189 	return REINTERPRET_CAST(CTelObject*,CCallDstdIden::NewL(iFac));
       
   190 	}
       
   191 
       
   192 CTelObject* CLineDstdIden::OpenNewObjectL(TDes& aNewName)
       
   193 	{
       
   194 	aNewName.Append(DSTDIDEN_MODULE_NAME);
       
   195 	aNewName.AppendNum(iNameIndex++);
       
   196 	return REINTERPRET_CAST(CTelObject*,CCallDstdIden::NewL(iFac));
       
   197 	}
       
   198 
       
   199 //
       
   200 //	CPhoneDstdIden
       
   201 //
       
   202 CPhoneDstdIden* CPhoneDstdIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   203 	{
       
   204 	CPhoneDstdIden* phone=new(ELeave) CPhoneDstdIden(aFac);
       
   205 	CleanupStack::PushL(phone);
       
   206 	phone->ConstructL();
       
   207 	CleanupStack::Pop();
       
   208 	return phone;
       
   209 	}
       
   210 
       
   211 CPhoneDstdIden::CPhoneDstdIden(CPhoneFactoryDummyBase* aFac)
       
   212 	:CPhoneDummyBase(aFac)
       
   213 	{}
       
   214 
       
   215 CPhoneDstdIden::~CPhoneDstdIden()
       
   216 	{}
       
   217 
       
   218 TInt CPhoneDstdIden::EnumerateLines(const TTsyReqHandle aTsyReqHandle,TInt* aNumLines)
       
   219 	{
       
   220 	*aNumLines=DSTD_NUMBER_OF_LINES;
       
   221 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   222 	return KErrNone;
       
   223 	}
       
   224 
       
   225 TInt CPhoneDstdIden::GetLineInfo(const TTsyReqHandle aTsyReqHandle,TLineInfoIndex* aLineInfo)
       
   226 	{
       
   227 	if (aLineInfo->iIndex!=0)
       
   228 		return(KErrArgument);
       
   229 
       
   230 	aLineInfo->iInfo.iStatus=DSTD_LINE_STATUS;
       
   231 	aLineInfo->iInfo.iName.Copy(DSTD_LINE_NAME);
       
   232 
       
   233 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   234 	return KErrNone;
       
   235 	}
       
   236 
       
   237 CTelObject::TReqMode CPhoneDstdIden::ReqModeL(const TInt aIpc)
       
   238 //
       
   239 //	Request Mode for Phone
       
   240 //
       
   241 	{
       
   242 	CTelObject::TReqMode ret=0;
       
   243 	switch (aIpc)
       
   244 		{
       
   245 	case EEtelPhoneNotifyModemDetected:
       
   246 		ret=KReqModeMultipleCompletionEnabled;
       
   247 		break;
       
   248 	case EEtelPhoneEnumerateLines:
       
   249 	case EEtelPhoneGetLineInfo:
       
   250 	case EEtelPhoneGetCaps:
       
   251 	case EEtelPhoneGetStatus:
       
   252 	case EEtelPhoneGetInfo:
       
   253 		ret=KReqModeFlowControlObeyed;
       
   254 		break;
       
   255 	default:
       
   256 		User::Leave(KErrNotSupported);
       
   257 		break;
       
   258 		}
       
   259 	return ret;
       
   260 
       
   261 	}
       
   262 
       
   263 TInt CPhoneDstdIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   264 	{
       
   265 	return KErrNotSupported;
       
   266 	}
       
   267 
       
   268 CTelObject* CPhoneDstdIden::OpenNewObjectByNameL(const TDesC& aName)
       
   269 	{
       
   270 	if (aName.Compare(DSTD_LINE_NAME)==KErrNone)
       
   271 		return REINTERPRET_CAST(CTelObject*,CLineDstdIden::NewL(FacPtr()));
       
   272 	return NULL;
       
   273 	}
       
   274 
       
   275 CTelObject* CPhoneDstdIden::OpenNewObjectL(TDes& /*aNewName*/)
       
   276 	{
       
   277 	User::Leave(KErrNotSupported);
       
   278 	return NULL;
       
   279 	}
       
   280 
       
   281 void CPhoneDstdIden::Init()
       
   282 	{}
       
   283 
       
   284 //
       
   285 //	FlowControl	Phone
       
   286 //
       
   287 
       
   288 //
       
   289 //	CFaxFcIden
       
   290 //
       
   291 CFaxFcIden* CFaxFcIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   292 	{
       
   293 	CFaxFcIden* fax=new(ELeave) CFaxFcIden(aFac);
       
   294 	CleanupStack::PushL(fax);
       
   295 	fax->ConstructL();
       
   296 	CleanupStack::Pop();
       
   297 	return fax;
       
   298 	}
       
   299 
       
   300 CFaxFcIden::CFaxFcIden(CPhoneFactoryDummyBase* aFac)
       
   301 	:CFaxDummyBase(aFac)
       
   302 	{}
       
   303 
       
   304 void CFaxFcIden::ConstructL()
       
   305 	{
       
   306 	TInt r = iChunk.CreateGlobal(KNullDesC,sizeof (RFax::TProgress), sizeof (RFax::TProgress),EOwnerProcess); 
       
   307 	if (r == KErrNone)
       
   308 		{
       
   309 		RFax::TProgress* progress = new(iChunk.Base()) RFax::TProgress;
       
   310 		progress->iLastUpdateTime = 0;
       
   311 		progress->iAnswerback.Zero ();
       
   312 		progress->iPhase = ENotYetStarted;
       
   313 		progress->iSpeed = 9600;
       
   314 		progress->iResolution = EFaxNormal;
       
   315 		progress->iCompression = EModifiedHuffman;
       
   316 		progress->iECM = 0;
       
   317  		progress->iPage = 0;
       
   318 		progress->iLines = 0;
       
   319 		}	
       
   320 else
       
   321 		User::Leave(r);
       
   322 	}
       
   323 	
       
   324 RHandleBase* CFaxFcIden::GlobalKernelObjectHandle()
       
   325 	{
       
   326 		return &iChunk;
       
   327 	}
       
   328 
       
   329 CFaxFcIden::~CFaxFcIden()
       
   330 	{
       
   331 	iChunk.Close();
       
   332 	}
       
   333 
       
   334 //
       
   335 //	CCallFcIden
       
   336 //
       
   337 CCallFcIden* CCallFcIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   338 	{
       
   339 	CCallFcIden* call=new(ELeave) CCallFcIden(aFac);
       
   340 	CleanupStack::PushL(call);
       
   341 	call->ConstructL();
       
   342 	CleanupStack::Pop();
       
   343 	return call;
       
   344 	}
       
   345 
       
   346 CCallFcIden::CCallFcIden(CPhoneFactoryDummyBase* aFac)
       
   347 	:CCallDummyBase(aFac)
       
   348 	{}
       
   349 
       
   350 CCallFcIden::~CCallFcIden()
       
   351 	{}
       
   352 
       
   353 
       
   354 
       
   355 TInt CCallFcIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   356 	{
       
   357 	return KErrNotSupported;
       
   358 	}
       
   359 
       
   360 CTelObject* CCallFcIden::OpenNewObjectByNameL(const TDesC& )
       
   361 	{
       
   362 	return REINTERPRET_CAST(CTelObject*,CFaxFcIden::NewL(FacPtr()));
       
   363 	}
       
   364 
       
   365 CTelObject* CCallFcIden::OpenNewObjectL(TDes& /*aNewName*/)
       
   366 	{
       
   367 	User::Leave(KErrNotSupported);
       
   368 	return NULL;
       
   369 	}
       
   370 
       
   371 //
       
   372 //	CLineFcIden
       
   373 //
       
   374 CLineFcIden* CLineFcIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   375 	{
       
   376 	CLineFcIden* line=new(ELeave)CLineFcIden(aFac);
       
   377 	CleanupStack::PushL(line);
       
   378 	line->ConstructL();
       
   379 	CleanupStack::Pop();
       
   380 	return line;
       
   381 	}
       
   382 
       
   383 CLineFcIden::CLineFcIden(CPhoneFactoryDummyBase* aFac)
       
   384 	:CLineDummyBase(aFac)
       
   385 	{}
       
   386 
       
   387 CLineFcIden::~CLineFcIden()
       
   388 	{}
       
   389 
       
   390 TInt CLineFcIden::EnumerateCall(const TTsyReqHandle aTsyReqHandle,TInt* aCount)
       
   391 	{
       
   392 	*aCount=iNumberOfCalls;
       
   393 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   394 	return KErrNone;
       
   395 	}
       
   396 
       
   397 TInt CLineFcIden::GetCallInfo(const TTsyReqHandle aTsyReqHandle,TCallInfoIndex* aCallInfo)
       
   398 	{
       
   399 	aCallInfo->iInfo.iStatus=DSTDFC_CALL_STATUS;
       
   400 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   401 	return KErrNone;
       
   402 	}
       
   403 
       
   404 TInt CLineFcIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   405 	{
       
   406 	return KErrNotSupported;
       
   407 	}
       
   408 
       
   409 CTelObject* CLineFcIden::OpenNewObjectByNameL(const TDesC& aName)
       
   410 	{
       
   411 	if (aName.Compare(DSTDFC_CALL_NAME)==KErrNone)
       
   412 		return REINTERPRET_CAST(CTelObject*,CCallFcIden::NewL(FacPtr()));
       
   413 	return NULL;
       
   414 	}
       
   415 
       
   416 CTelObject* CLineFcIden::OpenNewObjectL(TDes& aNewName)
       
   417 	{
       
   418 	aNewName.Append(DSTDIDEN_MODULE_NAME);
       
   419 	aNewName.AppendNum(iNameIndex++);
       
   420 	return REINTERPRET_CAST(CTelObject*,CCallFcIden::NewL(FacPtr()));
       
   421 	}
       
   422 
       
   423 //
       
   424 //	CPhoneFcIden
       
   425 //
       
   426 CPhoneFcIden* CPhoneFcIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   427 	{
       
   428 	CPhoneFcIden* phone=new(ELeave) CPhoneFcIden(aFac);
       
   429 	CleanupStack::PushL(phone);
       
   430 	phone->ConstructL();
       
   431 	CleanupStack::Pop();
       
   432 	return phone;
       
   433 	}
       
   434 
       
   435 CPhoneFcIden::CPhoneFcIden(CPhoneFactoryDummyBase* aFac)
       
   436 	:CPhoneDummyBase(aFac)
       
   437 	{}
       
   438 
       
   439 void CPhoneFcIden::Init()
       
   440 	{
       
   441 	FlowControlSuspend();
       
   442 	FacPtr()->QueueTimer(iOpenPhone,0,DSTDFC_OPEN_PHONE_TIMEOUT,CPhoneFcIden::OpenPhoneHandler,this);
       
   443 	}
       
   444 
       
   445 TInt CPhoneFcIden::OpenPhoneHandler(TAny* aPtr)
       
   446 	{
       
   447 	REINTERPRET_CAST(CPhoneFcIden*,aPtr)->FlowControlResume();
       
   448 	REINTERPRET_CAST(CPhoneFcIden*,aPtr)->FacPtr()->ResetPending(REINTERPRET_CAST(CPhoneFcIden*,aPtr)->iOpenPhone );
       
   449 	return KErrNone;
       
   450 	}
       
   451 
       
   452 CPhoneFcIden::~CPhoneFcIden()
       
   453 	{
       
   454 	FacPtr()->RemoveTimer(iOpenPhone);
       
   455 	}
       
   456 
       
   457 TInt CPhoneFcIden::EnumerateLines(const TTsyReqHandle aTsyReqHandle,TInt* aNumLines)
       
   458 	{
       
   459 	*aNumLines=DSTDFC_NUMBER_OF_LINES;
       
   460 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   461 	return KErrNone;
       
   462 	}
       
   463 
       
   464 TInt CPhoneFcIden::GetLineInfo(const TTsyReqHandle aTsyReqHandle,TLineInfoIndex* aLineInfo)
       
   465 	{
       
   466 	if (aLineInfo->iIndex!=0)
       
   467 		return(KErrArgument);
       
   468 
       
   469 	aLineInfo->iInfo.iStatus=DSTDFC_LINE_STATUS;
       
   470 	aLineInfo->iInfo.iName.Copy(DSTDFC_LINE_NAME);
       
   471 
       
   472 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   473 	return KErrNone;
       
   474 	}
       
   475 
       
   476 TInt CPhoneFcIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   477 	{
       
   478 	return KErrNotSupported;
       
   479 	}
       
   480 
       
   481 CTelObject* CPhoneFcIden::OpenNewObjectByNameL(const TDesC& aName)
       
   482 	{
       
   483 	if (aName.Compare(DSTDFC_LINE_NAME)==KErrNone)
       
   484 		return REINTERPRET_CAST(CTelObject*,CLineFcIden::NewL(FacPtr()));
       
   485 	return NULL;
       
   486 	}
       
   487 
       
   488 CTelObject* CPhoneFcIden::OpenNewObjectL(TDes& /*aNewName*/)
       
   489 	{
       
   490 	User::Leave(KErrNotSupported);
       
   491 	return NULL;
       
   492 	}
       
   493 
       
   494 //
       
   495 //	CFaxPmIden
       
   496 //
       
   497 CFaxPmIden* CFaxPmIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   498 	{
       
   499 	CFaxPmIden* fax=new(ELeave) CFaxPmIden(aFac);
       
   500 	CleanupStack::PushL(fax);
       
   501 	fax->ConstructL();
       
   502 	CleanupStack::Pop();
       
   503 	return fax;
       
   504 	}
       
   505 
       
   506 CFaxPmIden::CFaxPmIden(CPhoneFactoryDummyBase* aFac)
       
   507 	:CFaxDummyBase(aFac)
       
   508 	{}
       
   509 
       
   510 void CFaxPmIden::ConstructL()
       
   511 	{
       
   512 	TInt r = iChunk.CreateGlobal(KNullDesC,sizeof (RFax::TProgress), sizeof (RFax::TProgress),EOwnerProcess); 
       
   513 	if (r == KErrNone)
       
   514 		{
       
   515 		RFax::TProgress* progress = new(iChunk.Base()) RFax::TProgress;
       
   516 		progress->iLastUpdateTime = 0;
       
   517 		progress->iAnswerback.Zero ();
       
   518 		progress->iPhase = ENotYetStarted;
       
   519 		progress->iSpeed = 9600;
       
   520 		progress->iResolution = EFaxNormal;
       
   521 		progress->iCompression = EModifiedHuffman;
       
   522 		progress->iECM = 0;
       
   523  		progress->iPage = 0;
       
   524 		progress->iLines = 0;
       
   525 		}	
       
   526 	else
       
   527 		User::Leave(r);
       
   528 	}
       
   529 	
       
   530 RHandleBase* CFaxPmIden::GlobalKernelObjectHandle()
       
   531 	{
       
   532 		return &iChunk;
       
   533 	}
       
   534 
       
   535 CFaxPmIden::~CFaxPmIden()
       
   536 	{
       
   537 	iChunk.Close();
       
   538 	}
       
   539 
       
   540 //
       
   541 //	CCallPmIden
       
   542 //
       
   543 CCallPmIden* CCallPmIden::NewL(TInt& aNumberOfCalls,CPhoneFactoryDummyBase* aFac)
       
   544 	{
       
   545 	CCallPmIden* call=new(ELeave) CCallPmIden(aNumberOfCalls,aFac);
       
   546 	CleanupStack::PushL(call);
       
   547 	call->ConstructL();
       
   548 	CleanupStack::Pop();
       
   549 	return call;
       
   550 	}
       
   551 
       
   552 CCallPmIden::CCallPmIden(TInt& aNumberOfCalls,CPhoneFactoryDummyBase* aFac)
       
   553 	: CCallDummyBase(aFac),
       
   554 	iNumberOfCalls(aNumberOfCalls)
       
   555 	{}
       
   556 
       
   557 CCallPmIden::~CCallPmIden()
       
   558 	{
       
   559 	iNumberOfCalls--;
       
   560 	}
       
   561 
       
   562 TInt CCallPmIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   563 	{
       
   564 	return KErrNotSupported;
       
   565 	}
       
   566 
       
   567 CTelObject* CCallPmIden::OpenNewObjectByNameL(const TDesC& )
       
   568 	{
       
   569 	return REINTERPRET_CAST(CTelObject*,CFaxPmIden::NewL(FacPtr()));
       
   570 	}
       
   571 CTelObject* CCallPmIden::OpenNewObjectL(TDes& /*aNewName*/)
       
   572 	{
       
   573 	User::Leave(KErrNotSupported);
       
   574 	return NULL;
       
   575 	}
       
   576 
       
   577 
       
   578 //
       
   579 //	CLinePmIden
       
   580 //
       
   581 CLinePmIden* CLinePmIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   582 	{
       
   583 	CLinePmIden* line=new(ELeave) CLinePmIden(aFac);
       
   584 	CleanupStack::PushL(line);
       
   585 	line->ConstructL();
       
   586 	CleanupStack::Pop();
       
   587 	return line;
       
   588 	}
       
   589 
       
   590 CLinePmIden::CLinePmIden(CPhoneFactoryDummyBase* aFac)
       
   591 	:CLineDummyBase(aFac)
       
   592 	{}
       
   593 
       
   594 void CLinePmIden::ConstructL()
       
   595 	{
       
   596 	CLineDummyBase::ConstructL();
       
   597 	iNumberOfCalls=0;
       
   598 	iCallName.SetLength(0);
       
   599 	}
       
   600 
       
   601 CLinePmIden::~CLinePmIden()
       
   602 	{}
       
   603 
       
   604 TInt CLinePmIden::EnumerateCall(const TTsyReqHandle aTsyReqHandle,TInt* aCount)
       
   605 	{
       
   606 	*aCount=iNumberOfCalls;
       
   607 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   608 	return KErrNone;
       
   609 	}
       
   610 
       
   611 TInt CLinePmIden::GetCallInfo(const TTsyReqHandle aUid,TCallInfoIndex* aCallInfo)
       
   612 	{
       
   613 	aCallInfo->iInfo.iStatus=	DSTDPM_CALL_STATUS;
       
   614 	aCallInfo->iInfo.iCallName.Copy(iCallName);
       
   615 
       
   616 	ReqCompleted(aUid,KErrNone);
       
   617 	return KErrNone;
       
   618 	}
       
   619 
       
   620 TInt CLinePmIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   621 	{
       
   622 	return KErrNotSupported;
       
   623 	}
       
   624 
       
   625 CTelObject* CLinePmIden::OpenNewObjectByNameL(const TDesC& aName)
       
   626 	{
       
   627 	iNumberOfCalls++;
       
   628 	iCallName.Copy(aName);
       
   629 	return REINTERPRET_CAST(CTelObject*,CCallPmIden::NewL(iNumberOfCalls,FacPtr()));
       
   630 	}
       
   631 CTelObject* CLinePmIden::OpenNewObjectL(TDes& aNewName)
       
   632 	{
       
   633 	iNumberOfCalls++;
       
   634 	aNewName.Append(DSTDIDEN_MODULE_NAME);
       
   635 	aNewName.AppendNum(iNameIndex++);
       
   636 	iCallName.Copy(aNewName);
       
   637 	return REINTERPRET_CAST(CTelObject*,CCallPmIden::NewL(iNumberOfCalls,FacPtr()));
       
   638 	}
       
   639 
       
   640 //
       
   641 //	CPhonePmIden
       
   642 //
       
   643 CPhonePmIden* CPhonePmIden::NewL(CPhoneFactoryDummyBase* aFac)
       
   644 	{
       
   645 	CPhonePmIden* phone=new(ELeave) CPhonePmIden(aFac);
       
   646 	CleanupStack::PushL(phone);
       
   647 	phone->ConstructL();
       
   648 	CleanupStack::Pop();
       
   649 	return phone;
       
   650 	}
       
   651 
       
   652 CPhonePmIden::CPhonePmIden(CPhoneFactoryDummyBase* aFac)
       
   653 	:CPhoneDummyBase(aFac)
       
   654 	{}
       
   655 
       
   656 void CPhonePmIden::Init()
       
   657 	{}
       
   658 
       
   659 CPhonePmIden::~CPhonePmIden()
       
   660 	{}
       
   661 
       
   662 TInt CPhonePmIden::EnumerateLines(const TTsyReqHandle aTsyReqHandle,TInt* aNumLines)
       
   663 	{
       
   664 	*aNumLines=DSTDPM_NUMBER_OF_LINES;
       
   665 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   666 	return KErrNone;
       
   667 	}
       
   668 
       
   669 TInt CPhonePmIden::GetLineInfo(const TTsyReqHandle aTsyReqHandle,TLineInfoIndex* aLineInfo)
       
   670 	{
       
   671 	if (aLineInfo->iIndex!=0)
       
   672 		return(KErrArgument);
       
   673 
       
   674 	aLineInfo->iInfo.iStatus=DSTDPM_LINE_STATUS;
       
   675 	aLineInfo->iInfo.iName.Copy(DSTDPM_LINE_NAME);
       
   676 
       
   677 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   678 	return KErrNone;
       
   679 	}
       
   680 
       
   681 TInt CPhonePmIden::ExtFunc(const TTsyReqHandle,const TInt,const TDataPackage&)
       
   682 	{
       
   683 	return KErrNotSupported;
       
   684 	}
       
   685 
       
   686 CTelObject* CPhonePmIden::OpenNewObjectByNameL(const TDesC& aName)
       
   687 	{
       
   688 	if (aName.Compare(DSTDPM_LINE_NAME)==KErrNone)
       
   689 		return REINTERPRET_CAST(CTelObject*,CLinePmIden::NewL(FacPtr()));
       
   690 	return NULL;
       
   691 	}
       
   692 CTelObject* CPhonePmIden::OpenNewObjectL(TDes& /*aNewName*/)
       
   693 	{
       
   694 	User::Leave(KErrNotSupported);
       
   695 	return NULL;
       
   696 	}
       
   697 
       
   698 //
       
   699 //	First Ordinal Functions
       
   700 //
       
   701 extern	"C"
       
   702 	{
       
   703 	IMPORT_C CPhoneFactoryBase* LibEntry();	//	Force "Proper Name" export
       
   704 	}
       
   705 
       
   706 EXPORT_C CPhoneFactoryBase* LibEntry()
       
   707 	{
       
   708 	CPhoneFactoryDstdIden* factory = NULL;
       
   709 	TRAP_IGNORE(factory = CPhoneFactoryDstdIden::NewL());
       
   710 	return factory;
       
   711 	}
       
   712 
       
   713 //
       
   714 //	DSTDIDEN Phone	Factory	Functions
       
   715 //
       
   716 
       
   717 CPhoneFactoryDstdIden* CPhoneFactoryDstdIden::NewL()
       
   718 	{
       
   719 	CPhoneFactoryDstdIden *This = new (ELeave) CPhoneFactoryDstdIden;
       
   720 	CleanupStack::PushL(This);
       
   721 	This->ConstructL();
       
   722 	CleanupStack::Pop();
       
   723 	return This;
       
   724 	}
       
   725 
       
   726 CPhoneFactoryDstdIden::CPhoneFactoryDstdIden()
       
   727 	{
       
   728 	iVersion=TVersion(	KTsyEtelMajorVersionNumber,
       
   729 						KTsyEtelMinorVersionNumber,
       
   730 						KTsyEtelBuildVersionNumber);
       
   731 	}
       
   732 
       
   733 CPhoneFactoryDstdIden::~CPhoneFactoryDstdIden()
       
   734 	{}
       
   735 
       
   736 CPhoneBase* CPhoneFactoryDstdIden::NewPhoneL(const TDesC& aName)
       
   737 	{
       
   738 	if (aName.Compare(DSTD_PHONE_NAME)==KErrNone)
       
   739 		return CPhoneDstdIden::NewL(this);
       
   740 	if (aName.Compare(DSTDFC_PHONE_NAME)==KErrNone)
       
   741 		return CPhoneFcIden::NewL(this);
       
   742 	if (aName.Compare(DSTDPM_PHONE_NAME)==KErrNone)
       
   743 		return CPhonePmIden::NewL(this);
       
   744 	return NULL;
       
   745 	}
       
   746 
       
   747 TInt CPhoneFactoryDstdIden::GetPhoneInfo(const TInt aIndex,RTelServer::TPhoneInfo& aInfo)
       
   748 	{
       
   749 	switch(aIndex)
       
   750 		{
       
   751 	case 0:
       
   752 		aInfo.iNetworkType=DSTD_NETWORK_TYPE;
       
   753 		aInfo.iName=DSTD_PHONE_NAME;	// same as DSTD's phone name
       
   754 		aInfo.iNumberOfLines=DSTD_NUMBER_OF_LINES;
       
   755 		return KErrNone;
       
   756 	default:
       
   757 		return KErrNotFound;
       
   758 		}
       
   759 	}
       
   760 
       
   761 TInt CPhoneFactoryDstdIden::EnumeratePhones()
       
   762 	{
       
   763 	TVersion version(KTsyEtelMajorVersionNumber,
       
   764 					KTsyEtelMinorVersionNumber,
       
   765 					KTsyEtelBuildVersionNumber);
       
   766 	if (!QueryVersionSupported(version))
       
   767 		return(KErrNotSupported);
       
   768 
       
   769 	return (DSTDIDEN_NUMBER_OF_PHONES);
       
   770 	}
       
   771