enum TVerdict CTestErrNewTelObjectIllegalBuffer::doTestStepL() /** Check that CTelSession::NewTelObject fails when an illegal buffer is passed to it for the name of the call. (Uses similar code to that in RTelServer::OpenNewCall().) @return EPass or EFail */ { RTelServer1 server; TInt ret = server.Connect(); TESTCHECK(ret, KErrNone); ret=server.LoadPhoneModule(DSTD_MODULE_NAME); TESTCHECK(ret, KErrNone); RTelServer::TPhoneInfo phoneInfo; ret = server.GetPhoneInfo( 0, phoneInfo ); TESTCHECK(ret, KErrNone); RPhone phone; ret = phone.Open( server, phoneInfo.iName ); TESTCHECK(ret, KErrNone); RPhone::TLineInfo lineInfo; ret = phone.GetLineInfo( 0, lineInfo ); TESTCHECK(ret, KErrNone); RLine line; ret = line.Open( phone, lineInfo.iName ); char retName; // Illegal buffer. RCall1 call; // Taken from OpenNewCall(line , retName); RSessionBase* session=&line.SessionHandle(); call.ConstructL(); TInt subSessionHandle=line.SubSessionHandle(); TPtrC name(_L("::")); // necessary so that server knows to ask TSY for new name TIpcArgs args(&name,REINTERPRET_CAST(TDes*,&retName),subSessionHandle); call.SetSessionHandle(*session); ret = call.CreateSubSession(*session,EEtelOpenFromSubSession,args); call.Destruct(); TESTCHECK(ret, KErrBadDescriptor); line.Close(); phone.Close(); ret=server.UnloadPhoneModule(DSTD_MODULE_NAME); TESTCHECK(ret, KErrNone); ServerClose(server); return TestStepResult(); }
enum TVerdict CTestErrNewTelObjectOk::doTestStepL() /** Check that RTelServer::OpenNewCall returns no errors when it has a large enough valid buffer to put the call name in. @return EPass or EFail */ { RTelServer1 server; TInt ret = server.Connect(); TESTCHECK(ret, KErrNone); ret=server.LoadPhoneModule(DSTD_MODULE_NAME); TESTCHECK(ret, KErrNone); RTelServer::TPhoneInfo phoneInfo; ret = server.GetPhoneInfo( 0, phoneInfo ); TESTCHECK(ret, KErrNone); RPhone phone; ret = phone.Open( server, phoneInfo.iName ); TESTCHECK(ret, KErrNone); RPhone::TLineInfo lineInfo; ret = phone.GetLineInfo( 0, lineInfo ); TESTCHECK(ret, KErrNone); RLine line; ret = line.Open( phone, lineInfo.iName ); TName retName; // Check that we can get a name for the newly opened call. RCall call; ret = call.OpenNewCall(line , retName); TESTCHECK(ret, KErrNone); call.Close(); line.Close(); phone.Close(); ret=server.UnloadPhoneModule(DSTD_MODULE_NAME); TESTCHECK(ret, KErrNone); ServerClose(server); return TestStepResult(); }
enum TVerdict CTestErrNewTelObjectSmallBuffer::doTestStepL() /** Check that CTelSession::NewTelObject fails when a small buffer is passed to it for the name of the call. (Uses similar code to that in RTelServer::OpenNewCall().) @return EPass or EFail */ { RTelServer1 server; TInt ret = server.Connect(); TESTCHECK(ret, KErrNone); ret=server.LoadPhoneModule(DSTD_MODULE_NAME); TESTCHECK(ret, KErrNone); RTelServer::TPhoneInfo phoneInfo; ret = server.GetPhoneInfo( 0, phoneInfo ); TESTCHECK(ret, KErrNone); RPhone phone; ret = phone.Open( server, phoneInfo.iName ); TESTCHECK(ret, KErrNone); RPhone::TLineInfo lineInfo; ret = phone.GetLineInfo( 0, lineInfo ); TESTCHECK(ret, KErrNone); RLine line; ret = line.Open( phone, lineInfo.iName ); TBuf<1> retName; //Buffer too small to recieve name. RCall call; ret = call.OpenNewCall(line , retName); TESTCHECK(ret, KErrOverflow); line.Close(); phone.Close(); ret=server.UnloadPhoneModule(DSTD_MODULE_NAME); TESTCHECK(ret, KErrNone); ServerClose(server); return TestStepResult(); }
void CTelServerProcessor::GetLineInfoL(RPhone::TLineInfo& aInfo,const TDesC& aPhoneName, TUint aLineType) { RPhone phone; User::LeaveIfError(phone.Open(iTelServer,aPhoneName)); CleanupClosePushL(phone); TInt count = 0; User::LeaveIfError(phone.EnumerateLines(count)); if (count <= 0) { OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CTELSERVERPROCESSOR_GETLINEINFOL_1,"NetDial:\tGetLineInfoL(): no line info available - leaving with -1"); User::Leave(KErrNotFound); } TBool found = EFalse; for (TInt i=0; i<count && !found; ++i) { User::LeaveIfError(phone.GetLineInfo(i,aInfo)); /* if (aInfo.iLineCapsFlags & aLineType) // Required line found { found=ETrue; } */ RLine line; User::LeaveIfError(line.Open(phone,aInfo.iName)); CleanupClosePushL(line); RLine::TCaps caps; User::LeaveIfError(line.GetCaps(caps)); if (caps.iFlags & aLineType) // Required line found { found=ETrue; } CleanupStack::PopAndDestroy(&line); } CleanupStack::PopAndDestroy(&phone); if (!found) { OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CTELSERVERPROCESSOR_GETLINEINFOL_2, "NetDial:\tGetLineInfoL(): required line not found - leaving with -1"); User::Leave(KErrNotFound); } }
static void DialNumberL(PktBuf &in, PktBuf &out) { /// @todo maybe use a CActive object to allow the call to be cancelled from gammu TBuf<100> aPhoneNumber; in >> aPhoneNumber; cons->Printf( _L("dialing... number:\n") ); cons->Printf( aPhoneNumber ); cons->Printf( _L("\n") ); TName newCallName = _L("call"); //Create a connection to the tel server RTelServer server; CleanupClosePushL(server); User::LeaveIfError(server.Connect()); //Load in the phone device driver User::LeaveIfError(server.LoadPhoneModule(KTsyName)); //Find the number of phones available from the tel server TInt numberPhones; User::LeaveIfError(server.EnumeratePhones(numberPhones)); //Check there are available phones if (numberPhones < 1) { User::Leave(KErrNotFound); } //Get info about the first available phone RTelServer::TPhoneInfo info; User::LeaveIfError(server.GetPhoneInfo(0, info)); //Use this info to open a connection to the phone, the phone is identified by its name RPhone phone; CleanupClosePushL(phone); User::LeaveIfError(phone.Open(server, info.iName)); //Get info about the first line from the phone RPhone::TLineInfo lineInfo; User::LeaveIfError(phone.GetLineInfo(0, lineInfo)); //Use this to open a line RLine line; CleanupClosePushL(line); User::LeaveIfError(line.Open(phone, lineInfo.iName)); //Open a new call on this line RCall call; CleanupClosePushL(call); User::LeaveIfError(call.OpenNewCall(line, newCallName)); if ((call.Dial(aPhoneNumber) == KErrNone)) { TRequestStatus iStatus; RCall::TStatus iLineStatus; line.NotifyStatusChange(iStatus, iLineStatus); User::WaitForRequest(iStatus); } CleanupStack::PopAndDestroy(4);//phone, line, call //Unload the phone device driver User::LeaveIfError(server.UnloadPhoneModule(KTsyName)); out << (TUint16)GNAPPLET_MSG_PHONEBOOK_DIAL_RESP; out << (TUint16)GN_ERR_NONE; }