/** Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).* All rights reserved.* This component and the accompanying materials are made available* under the terms of "Eclipse Public License v1.0"* which accompanies this distribution, and is available* at the URL "http://www.eclipse.org/legal/epl-v10.html".** Initial Contributors:* Nokia Corporation - initial contribution.** Contributors:** Description: Main client side interface of DUN**/#include "dunclient.h"#include "dunserverdef.h"#include "DunDebug.h"#include "dunactive.h"const TInt KDunRetryCount = 3;const TInt KDunNumOfMessageSlots = 4;// ======== LOCAL FUNCTIONS ========// ---------------------------------------------------------------------------// Create server thread/process// ---------------------------------------------------------------------------//static TInt StartServer() { FTRACE(FPrint( _L("StartServer()") )); TInt retVal = KErrNone; TRequestStatus statusStarted; RProcess server; retVal = server.Create( KDialupServerName, KNullDesC, EOwnerThread ); if ( retVal != KErrNone ) { FTRACE(FPrint( _L("StartServer() complete (%d)"), retVal )); return retVal; } TRequestStatus stat; server.Rendezvous( stat ); if ( stat != KRequestPending ) { server.Kill( 0 ); //abort startup } else { server.Resume(); //logon OK - start the server } User::WaitForRequest( stat ); //wait the start or death of the server /* we can't use the 'exit reason' if the server panicked as this is the panic 'reason' and may be '0' which cannot be distinguished from KErrNone */ retVal = stat.Int(); if ( server.ExitType() == EExitPanic ) { retVal = KErrServerTerminated; } server.Close(); FTRACE(FPrint( _L("StartServer() complete (%d)"), retVal )); return retVal; }// ======== MEMBER FUNCTIONS ========// ---------------------------------------------------------------------------// RDun::RDun()// ---------------------------------------------------------------------------//RDun::RDun() { }// ---------------------------------------------------------------------------// This function starts DUN open/close for different medias// ---------------------------------------------------------------------------//TInt RDun::ManageService( MDunActive* aRequest, TRequestStatus& aReqStatus ) { FTRACE(FPrint( _L("RDun::ManageService()") )); SendReceive( EDunFuncManageService, TIpcArgs(aRequest->Bearer(), aRequest->BearerStatus()), aReqStatus ); FTRACE(FPrint( _L("RDun::ManageService() complete") )); return KErrNone; }// ---------------------------------------------------------------------------// This function gets the active connection// ---------------------------------------------------------------------------//TAny* RDun::ActiveConnection() { FTRACE(FPrint( _L("RDun::ActiveConnection()") )); TAny* connId = NULL; TPckg<TAny*> connIdPckg( connId ); SendReceive( EDunFuncActiveConnection, TIpcArgs(&connIdPckg) ); FTRACE(FPrint( _L("RDun::ActiveConnection() complete") )); return connId; }// ---------------------------------------------------------------------------// Version number// ---------------------------------------------------------------------------//TVersion RDun::Version() const { FTRACE(FPrint( _L("RDun::Version()") )); FTRACE(FPrint( _L("RDun::Version() complete") )); return ( TVersion(KDunServerMajorVersionNumber, KDunServerMinorVersionNumber, KDunServerBuildVersionNumber) ); }// ---------------------------------------------------------------------------// This function connects to DUN server and creates a new session.// ---------------------------------------------------------------------------//TInt RDun::Connect() { FTRACE(FPrint( _L("RDun::Connect()") )); TInt retry; TInt retVal = KErrNone; for ( retry=KDunRetryCount; retry>=0; retry-- ) { retVal=CreateSession( KDialupServerName, TVersion(KDunServerMajorVersionNumber, KDunServerMinorVersionNumber, KDunServerBuildVersionNumber), KDunNumOfMessageSlots ); if ( retVal == KErrNotFound || retVal == KErrServerTerminated ) { retVal = StartServer(); if ( retVal!=KErrNone && retVal!=KErrAlreadyExists ) { FTRACE(FPrint( _L("RDun::Connect() complete (%d)"), retVal )); return retVal; } } else // KErrNone, or other error code. { FTRACE(FPrint( _L("RDun::Connect() complete (%d)"), retVal )); return retVal; } } FTRACE(FPrint( _L("RDun::Connect() complete (%d)"), retVal )); return retVal; }