natfw/natfwunsaf_protocols/unsaf_transport/src/cnatfwunsafquerydata.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 15:21:04 +0300
changeset 13 861e78e4e84c
parent 0 1bce908db942
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* 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:  
*
*/



#include <utf.h>
#include "cnatfwunsafquerydata.h"
#include "cnatfwunsafquerybase.h"
#include "cnatfwunsafquerya_aaaa.h"
#include "mnatfwunsafhostresolver.h"
#include "natfwunsaflog.h"
#include "natfwunsafserverresolverobserver.h"

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::CNATFWUNSAFQueryData
// ----------------------------------------------------------------------------
//
CNATFWUNSAFQueryData::CNATFWUNSAFQueryData( MNATFWUNSAFHostResolver& aResolver,
                                  RArray<TInetAddr>& aResult )
:iResolver ( aResolver ), iResultArray ( aResult )
    {
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::ConstructL
// ----------------------------------------------------------------------------
//
void CNATFWUNSAFQueryData::ConstructL(
                                  MNATFWUNSAFServerResolverObserver* aObserver,
                                  TUint aPort,
                                  const TDesC8& aProtocol,
                                  const TDesC8& aOriginalTarget,
                                  const TDesC8& aServiceName )
    {
    SetDefaultPort(aPort);
    iProtocol = aProtocol.AllocL();
    iTarget = aOriginalTarget.AllocL();
    iOriginalTarget = aOriginalTarget.AllocL();
    iServiceName = aServiceName.AllocL();
    iObserver = aObserver;
    NATFWUNSAF_INTLOG("CNATFWUNSAFQueryData::iDefaultPort", iDefaultPort)
    NATFWUNSAF_STRLOG("CNATFWUNSAFQueryData::iProtocol", aProtocol)
    NATFWUNSAF_STRLOG("CNATFWUNSAFQueryData::iTarget", aOriginalTarget)
    NATFWUNSAF_STRLOG("CNATFWUNSAFQueryData::iServiceName", aServiceName)
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::NewL
// ----------------------------------------------------------------------------
//
CNATFWUNSAFQueryData* CNATFWUNSAFQueryData::NewL(
                               MNATFWUNSAFServerResolverObserver* aObserver,
                               TUint aPort,
                               const TDesC8& aProtocol,
                               const TDesC8& aOriginalTarget,
                               const TDesC8& aServiceName,
                               MNATFWUNSAFHostResolver& aResolver,
                               RArray<TInetAddr>& aResult )
    {
    CNATFWUNSAFQueryData* self =
        new ( ELeave ) CNATFWUNSAFQueryData( aResolver, aResult );
    CleanupStack::PushL( self );
    self->ConstructL( aObserver, aPort,
                      aProtocol, aOriginalTarget, aServiceName );
    CleanupStack::Pop( self );
    return self;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::~CNATFWUNSAFQueryData
// ----------------------------------------------------------------------------
//
CNATFWUNSAFQueryData::~CNATFWUNSAFQueryData()
    {
    delete iTarget;
    delete iOriginalTarget;
    delete iProtocol;
    delete iServiceName;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::ResultArray
// ----------------------------------------------------------------------------
//
RArray<TInetAddr>& CNATFWUNSAFQueryData::ResultArray()
    {
    return iResultArray;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::Observer
// ----------------------------------------------------------------------------
//
MNATFWUNSAFServerResolverObserver* CNATFWUNSAFQueryData::Observer()
    {
    return iObserver;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::Port
// ----------------------------------------------------------------------------
//
TUint CNATFWUNSAFQueryData::Port() const
    {
    return iPort;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::DefaultPort
// ----------------------------------------------------------------------------
//
TUint CNATFWUNSAFQueryData::DefaultPort() const
    {
    return iDefaultPort;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::Protocol
// ----------------------------------------------------------------------------
//
const TDesC8& CNATFWUNSAFQueryData::Protocol() const
    {
    return *iProtocol;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::Target
// ----------------------------------------------------------------------------
//
const TDesC8& CNATFWUNSAFQueryData::Target() const
    {
    return *iTarget;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::OriginalTarget
// ----------------------------------------------------------------------------
//
const TDesC8& CNATFWUNSAFQueryData::OriginalTarget() const
    {
    return *iOriginalTarget;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::ServiceName
// ----------------------------------------------------------------------------
//
const TDesC8& CNATFWUNSAFQueryData::ServiceName() const
    {
    return *iServiceName;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::Resolver
// ----------------------------------------------------------------------------
//
MNATFWUNSAFHostResolver& CNATFWUNSAFQueryData::Resolver()
    {
    return iResolver;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::SetPort
// ----------------------------------------------------------------------------
//
void CNATFWUNSAFQueryData::SetPort( TUint aPort )
    {
    iPort = aPort;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::SetDefaultPort
// ----------------------------------------------------------------------------
//
void CNATFWUNSAFQueryData::SetDefaultPort( TUint aPort )
    {
    iDefaultPort = aPort;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::SetProtocolL
// ----------------------------------------------------------------------------
//
void CNATFWUNSAFQueryData::SetProtocolL( const TDesC8& aProtocol )
    {
    HBufC8* temp = aProtocol.AllocL();
    delete iProtocol;
    iProtocol = temp;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::SetTargetL
// ----------------------------------------------------------------------------
//
void CNATFWUNSAFQueryData::SetTargetL( const TDesC8& aTarget )
    {
    HBufC8* temp = aTarget.AllocL();
    delete iTarget;
    iTarget = temp;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::SetOriginalTargetL
// ----------------------------------------------------------------------------
//
void CNATFWUNSAFQueryData::SetOriginalTargetL( const TDesC8& aOriginalTarget )
    {
    HBufC8* temp = aOriginalTarget.AllocLC();
    delete iOriginalTarget;
    iOriginalTarget = temp;
    CleanupStack::Pop( temp );
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::CreateResultL
// ----------------------------------------------------------------------------
//
TBool CNATFWUNSAFQueryData::CreateResultL( CNATFWUNSAFQueryA_AAAA& aQuery )
    {
    TBool result = EFalse;
    iQuery = &aQuery;
    if ( AddResultToArrayL() )
        {
        result = ETrue;
        }
    while ( iQuery->QueryNext( iResolver ) )
        {
        if ( AddResultToArrayL() )
            {
            result = ETrue;
            }
        }
    return result;
    }

// ----------------------------------------------------------------------------
// CNATFWUNSAFQueryData::AddResultToArrayL
// ----------------------------------------------------------------------------
//
TBool CNATFWUNSAFQueryData::AddResultToArrayL()
    {
    TInetAddr addr( iQuery->QueryResultBuf() );
    addr.SetPort( iPort );

    User::LeaveIfError( ResultArray().Append( addr ) );

    return ETrue;
    }