--- a/voipplugins/dhcppositionprovider/src/dhcpwlanqueryhandler.cpp Tue Feb 02 00:05:57 2010 +0200
+++ /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 <sip.h>
-#include <sipprofileregistry.h>
-#include <sipprofile.h>
-#include <comms-infras/es_config.h>
-#include <in_sock.h>
-
-#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;
- }
-