wapstack/wapmessageapi/sws/WapMsgUtils.cpp
author srilekhas <srilekhas@symbian.org>
Fri, 17 Sep 2010 17:35:51 +0100
branchRCL_3
changeset 71 b10722dbe19e
parent 18 50bae5c5c85f
permissions -rw-r--r--
Merge RCL_3 fix to Bug 1398 with the latest delivery.

// Copyright (c) 2003-2009 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 "WapMsgUtils.h"
#include <wapmessage.h>
#include <wapmsgerr.h>
#include <es_wsms.h>
#include <f32file.h>

TInt CSWSWapMsgUtils::GetLocalAddress(HBufC8*& aLocalHost)
/**
Not supported
@internalComponent
@released
@since v8.0
*/
	{
	// Panic client if the buffer isn't null
	__ASSERT_ALWAYS(aLocalHost==NULL, User::Panic(Wap::KWapMsgPanicDescriptor, KErrArgument));

	RArray<Wap::TAddressInfo> myArray;

	TInt ret(0);
	TRAPD(err, ret=CWapMessageUtils::GetLocalAddressesL(myArray))
	if (err)
		{
		return err;
		}
	// GetLocalAddressesL can return KErrNotFound if there is no network interface up
	if (ret)
		{
		return ret;
		}

	TBuf16<256>tempBuf16;
	TBuf8<256>tempBuf8;				  
	TInetAddr* info = &myArray[0].iAddress;
	// Output the address to a descriptor
	info->Output(tempBuf16);
	// Need to convert the buffer to 8 bit;
	tempBuf8.Copy(tempBuf16);
	// Note: Ownership of the allocated buffer is passed to the client
	aLocalHost = HBufC8::New( tempBuf16.Length() );
	if (!aLocalHost)
		{
		return KErrNoMemory;
		}
	// Now copy the 8 bit version of the address
	*aLocalHost = tempBuf8;

	return KErrNone;
	}
			 
void CSWSWapMsgUtils::BuildAddrL(TSockAddr& aAddr, Wap::TBearer aBearer, const TDesC8& aHost, Wap::TPort aPort)
/**
Build a socket address according to the given parameters.
@internalComponent
@released
@since v8.0
@param aAddr the socket address which is built from given parameters
@param aBearer the underlie bearer type
@param aHost the host name
@param aHost the port number
*/
	{
    if (aBearer==Wap::EIP)
        {
        TInetAddr addr(aPort);
        HBufC16* addr16=HBufC16::NewL(aHost.Length());
        TPtr16 addr16Des=addr16->Des();
        addr16Des.Copy(aHost);
        // coverity[check_return]
        addr.Input(addr16Des);
        aAddr=addr;
        delete addr16;
        }
	else
		{
		TWapAddr addr;
		addr.SetWapPort(TWapPortNumber(aPort));
		addr.SetWapAddress(aHost);
		aAddr=addr;
		}
	}
void CSWSWapMsgUtils::AnalyseAddrL(TSockAddr& aAddr, Wap::TBearer aBearer, TDes8& aHost, Wap::TPort& aPort)
/**
Analyse a socket address, and generate host name and port
@internalComponent
@released
@since v8.0
@param aAddr the socket address to be analysed
@param aBearer the underlie bearer type
@param aHost the host name
@param aHost the port number
*/
	{
	aPort=static_cast<Wap::TPort>(aAddr.Port());
	if (aBearer==Wap::EIP)
		{
		TInetAddr addr(aAddr);
		// If the family is KAfInet6, the output buffer must be at least 
		// 39 characters. 
		// If less, the buffer is filled with '*' characters.
		HBufC16* addr16=HBufC16::NewL(40);
		TPtr16 addr16Des=addr16->Des();
		addr.Output(addr16Des);
		aHost.Copy(addr16Des);
		delete addr16;
		}
	else
		{
		TWapAddr& wapAddr = *(reinterpret_cast<TWapAddr*>(&aAddr));
		TPtrC8 addr=wapAddr.WapAddress();
		aHost.Copy(addr);
		}
	}