diff -r 65a3ef1d5bd0 -r f742655b05bf voipplugins/dhcppositionprovider/src/dhcpwlanqueryhandler.cpp --- a/voipplugins/dhcppositionprovider/src/dhcpwlanqueryhandler.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,334 +0,0 @@ -/* -* Copyright (c) 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: -* -*/ - -#include -#include -#include -#include -#include - -#include "dhcppsylogging.h" -#include "dhcppsyrequesterprogressobserver.h" -#include "dhcppsypanic.h" -#include "dhcpsocketlistener.h" -#include "dhcpwlanqueryhandler.h" -#include "dhcplocationinformationparser.h" -#include "dhcpdatasender.h" -#include "dhcpdatalocationrequest.h" -#include "dhcpconstants.h" -#include "dhcpconnectionengine.h" -#include "dhcpserveripaddressresolver.h" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// NewL -// --------------------------------------------------------------------------- -// -CDhcpWlanQueryHandler* CDhcpWlanQueryHandler::NewL(MDhcpPsyRequesterProgressObserver *aObserver) - { - TRACESTRING( "CDhcpWlanQueryHandler::NewL" ); - CDhcpWlanQueryHandler* self = new(ELeave) CDhcpWlanQueryHandler (aObserver); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CDhcpWlanQueryHandler::~CDhcpWlanQueryHandler() - { - TRACESTRING( "CDhcpWlanQueryHandler::~CDhcpWlanQueryHandler" ); - - // Close opened resources and delete reserved memory - Cancel(); - - Flush (); - - delete iLctnDataRequestor; - delete iLctnDataListener; - - iSocket.Close (); - - iConnection.Close(); - iSocketServer.Close(); - - TRACESTRING( "CDhcpWlanQueryHandler::~CDhcpWlanQueryHandler -- end" ); - } - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CDhcpWlanQueryHandler::CDhcpWlanQueryHandler (MDhcpPsyRequesterProgressObserver *aObserver) - : CActive (CActive::EPriorityStandard), iPsyProgressObserver (aObserver) - { - TRACESTRING( "CDhcpWlanQueryHandler::CDhcpWlanQueryHandler" ); - CActiveScheduler::Add(this); - } - -// --------------------------------------------------------------------------- -// LocationData -// --------------------------------------------------------------------------- -// -HBufC8* CDhcpWlanQueryHandler::LocationData () - { - return iLocationBufferData; - } - -// --------------------------------------------------------------------------- -// MakeLocationQueryL -// --------------------------------------------------------------------------- -// -void CDhcpWlanQueryHandler::MakeLocationQueryL (TUint32 aIapProfileId) - { - TRACESTRING( "CDhcpWlanQueryHandler::MakeLocationQueryL" ) - iIapProfileId = aIapProfileId; - - // Check is the device already connected to the wlan accessoint. - TBool connectionAttached = iConnectionEngine->IsConnectedL(iIapProfileId); - if (connectionAttached) - { - TRACESTRING("CDhcpWlanQueryHandler::MakeLocationQueryL, Attached" ) - iDhcpResolver = CDhcpPsyDhcpServerIPResolver::NewL(iConnection, iStatus); - iState = EDhcpIpAddressQuery; - } - else - { - TRACESTRING("CDhcpWlanQueryHandler::MakeLocationQueryL, Not attached" ) - iConnectionEngine->ConnectL (aIapProfileId, iStatus); - iState = EAttachToConnection; - } - - iPsyProgressObserver->ProgressPsyRequestNotificationL (MDhcpPsyRequesterProgressObserver::ELocationQueryStarted, - KErrNone); - - SetActive(); - } - -// --------------------------------------------------------------------------- -// ConstructL -// --------------------------------------------------------------------------- -// -void CDhcpWlanQueryHandler::ConstructL() - { - TRACESTRING( "CDhcpWlanQueryHandler::ConstructL" ); - User::LeaveIfError( iSocketServer.Connect() ); - User::LeaveIfError( iConnection.Open( iSocketServer ) ); - - iConnectionEngine = CDhcpConnectionEngine::NewL(iConnection); - // Add socket listener and requestor classes up. Rest parameters will be - // provided later on. - iLctnDataRequestor = CDhcpDataRequestor::NewL(iSocket); - iLctnDataListener = CDhcpPsySocketListener::NewL(&iSocket); - } - -// ----------------------------------------------------------------------------- -// CDhcpWlanQueryHandler::RunL -// ----------------------------------------------------------------------------- -// -void CDhcpWlanQueryHandler::RunL() - { - TRACESTRING2( "CDhcpWlanQueryHandler::RunL, %d ", iStatus.Int()); - TRACESTRING2( "CDhcpWlanQueryHandler::RunL, state %d ", iState); - TInt result = iStatus.Int(); - if (result != KErrNone && iState!=EDhcpIpAddressQuery) - { - iState=EDhpWlanIdle; - iPsyProgressObserver->ProgressPsyRequestNotificationL (MDhcpPsyRequesterProgressObserver::ELocationQueryFinished, - iStatus.Int()); - return; - } - switch (iState) - { - case EAttachToConnection: - { - TRACESTRING( "CDhcpWlanQueryHandler::RunL, AttachToConnection, start"); - - iState=EDhcpIpAddressQuery; - - // Get ip address of the dhcp server. - iDhcpResolver = CDhcpPsyDhcpServerIPResolver::NewL(iConnection, iStatus); - SetActive (); - } - break; - case EDhcpIpAddressQuery: - { - TRACESTRING( "CDhcpWlanQueryHandler::RunL, create and send the dhcp inform message to the wlan net, start"); - - User::LeaveIfError( iSocket.Open( iSocketServer, - KAfInet, - KSockDatagram, - KProtocolInetUdp, - iConnection ) ); - - TInetAddr addr( KInetAddrAny, KDhcpDefaultCliPort ); - iSocket.Bind( addr ); - - // Create a dhcp inform message and send it. - iLctnDataRequestor->SendDHCPMessageL(iDhcpResolver->DhcpServerInetAddress(), - iIapProfileId, iStatus); - - iState = ESendDhcpLocatinQuery; - SetActive (); - } - break; - - case ESendDhcpLocatinQuery: - { - TRACESTRING( "CDhcpWlanQueryHandler::RunL, send complete" ); - // Store transaction id to the listener object - iLctnDataListener->SetTransActionIdToFollow (iLctnDataRequestor->TransActionIdToFollow()); - // And start to listen the dhcp ack message from the subnet. - iLctnDataListener->RcvDHCPMessage (iStatus); - iState = EReceiveDhcpLocationAck; - SetActive (); - } - break; - case EReceiveDhcpLocationAck: - { - TRACESTRING( "CDhcpWlanQueryHandler::RunL, response received." ); - TInt statusCode = iStatus.Int(); - - // Make final XML buffer if possible. - TPtrC8 geoConfigInformation (iLctnDataListener->GeoConfigDhcpInformation()); - TPtrC8 civicInformation (iLctnDataListener->LocationCivicInformation ()); - - TRACESTRING2( "CDhcpWlanQueryHandler::RunL, Response, geoConfig length %d", - geoConfigInformation.Length() - ); - - TRACESTRING2 ( "CDhcpWlanQueryHandler::RunL, Response, civicInformation length %d", - civicInformation.Length() - ); - - if(iLocationBufferData) - { - delete iLocationBufferData; - iLocationBufferData = NULL; - } - - // We should able to calculate maximun length of target buffer - iLocationBufferData = HBufC8::NewL(KDhcpMaxLocInfoLength); - TDhcpLocationInformationParser informationParser; - TPtr8 ptr (iLocationBufferData->Des()); - - // Parse at next preferred order option 123 and if doesn't found then option 99 if - // possible ... - if (geoConfigInformation.Length()) // option 123, GeoSpatial location information - { - informationParser.ParseLocationInformation( - geoConfigInformation, - TDhcpLocationInformationParser::EDHCPCoordinates, ptr); - } - else if (civicInformation.Length()) // option 99, civic address location information - { - informationParser.ParseLocationInformation( - civicInformation, - TDhcpLocationInformationParser::EDHCPCivicAddress, ptr); - } - else - { - // No valid information from the dhcp server, notify caller for that. - statusCode = KErrNotFound; - } - - iState=EDhpWlanIdle; - iPsyProgressObserver->ProgressPsyRequestNotificationL (MDhcpPsyRequesterProgressObserver::ELocationQueryFinished, - statusCode ); - } - break; - default: - { - TRACESTRING( "CDhcpWlanQueryHandler::RunL, invalid switch-case" ); - User::Leave (KErrGeneral); - } - break; - } - } - -// ----------------------------------------------------------------------------- -// CDhcpWlanQueryHandler::DoCancel -// ----------------------------------------------------------------------------- -// -void CDhcpWlanQueryHandler::DoCancel() - { - TRACESTRING( "CDhcpWlanQueryHandler::DoCancel" ) - if (iConnectionEngine) - { - iConnectionEngine->Cancel(); - } - // Cancel onqoing request if needed. - if (iDhcpResolver) - { - iDhcpResolver->Cancel(); - } - - if (iLctnDataRequestor) - { - iLctnDataRequestor->Cancel(); - } - - if (iLctnDataListener) - { - iLctnDataListener->Cancel(); - } - - TRAPD (err, - iPsyProgressObserver->ProgressPsyRequestNotificationL (MDhcpPsyRequesterProgressObserver::ECancelled, - KErrNone ) ) ; - - TRequestStatus *status = &iStatus; - User::RequestComplete ( status, err ); - - TRACESTRING( "CDhcpWlanQueryHandler::DoCancel finished" ) - } - -// ----------------------------------------------------------------------------- -// CDhcpWlanQueryHandler::RunError -// ----------------------------------------------------------------------------- -// -TInt CDhcpWlanQueryHandler::RunError (TInt aErrorCode) - { - TRACESTRING2( "CDhcpWlanQueryHandler::RunError %d", aErrorCode ) - TRACESTRING2( "CDhcpWlanQueryHandler::RunError, state, %d", iState ) - iState=EDhpWlanIdle; - TRAPD (err, - iPsyProgressObserver->ProgressPsyRequestNotificationL (MDhcpPsyRequesterProgressObserver::ELocationQueryFinished, - aErrorCode ) ); - return err; - } - -// ----------------------------------------------------------------------------- -// CDhcpWlanQueryHandler::Flush -// ----------------------------------------------------------------------------- -// -void CDhcpWlanQueryHandler::Flush () - { - TRACESTRING( "CDhcpWlanQueryHandler::Flush" ) - delete iConnectionEngine; - iConnectionEngine = NULL; - delete iDhcpResolver; - iDhcpResolver = NULL; - delete iLocationBufferData; - iLocationBufferData=NULL; - } -