wapstack/wapmessageapi/sws/WapMsgUtils.cpp
author hgs
Thu, 23 Sep 2010 14:44:40 +0100
changeset 73 70d75957b98f
parent 44 8b72faa1200f
permissions -rw-r--r--
201037_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     2
// All rights reserved.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     7
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    10
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    11
// Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    12
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    13
// Description:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    14
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    15
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    16
#include "WapMsgUtils.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    17
#include <wapmessage.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    18
#include <wapmsgerr.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    19
#include <es_wsms.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    20
#include <f32file.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    21
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    22
TInt CSWSWapMsgUtils::GetLocalAddress(HBufC8*& aLocalHost)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    23
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    24
Not supported
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    25
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    26
@released
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    27
@since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    28
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    29
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    30
	// Panic client if the buffer isn't null
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    31
	__ASSERT_ALWAYS(aLocalHost==NULL, User::Panic(Wap::KWapMsgPanicDescriptor, KErrArgument));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    32
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    33
	RArray<Wap::TAddressInfo> myArray;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    34
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    35
	TInt ret(0);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    36
	TRAPD(err, ret=CWapMessageUtils::GetLocalAddressesL(myArray))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    37
	if (err)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    38
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    39
		return err;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    40
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    41
	// GetLocalAddressesL can return KErrNotFound if there is no network interface up
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    42
	if (ret)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    43
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    44
		return ret;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    45
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    46
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    47
	TBuf16<256>tempBuf16;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    48
	TBuf8<256>tempBuf8;				  
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    49
	TInetAddr* info = &myArray[0].iAddress;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    50
	// Output the address to a descriptor
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    51
	info->Output(tempBuf16);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    52
	// Need to convert the buffer to 8 bit;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    53
	tempBuf8.Copy(tempBuf16);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    54
	// Note: Ownership of the allocated buffer is passed to the client
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    55
	aLocalHost = HBufC8::New( tempBuf16.Length() );
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    56
	if (!aLocalHost)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    57
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    58
		return KErrNoMemory;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    59
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    60
	// Now copy the 8 bit version of the address
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    61
	*aLocalHost = tempBuf8;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    62
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    63
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    64
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    65
			 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    66
void CSWSWapMsgUtils::BuildAddrL(TSockAddr& aAddr, Wap::TBearer aBearer, const TDesC8& aHost, Wap::TPort aPort)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    67
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    68
Build a socket address according to the given parameters.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    69
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    70
@released
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    71
@since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    72
@param aAddr the socket address which is built from given parameters
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    73
@param aBearer the underlie bearer type
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    74
@param aHost the host name
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    75
@param aHost the port number
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    76
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    77
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    78
    if (aBearer==Wap::EIP)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    79
        {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    80
        TInetAddr addr(aPort);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    81
        HBufC16* addr16=HBufC16::NewL(aHost.Length());
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    82
        TPtr16 addr16Des=addr16->Des();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    83
        addr16Des.Copy(aHost);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    84
        // coverity[check_return]
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    85
        addr.Input(addr16Des);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    86
        aAddr=addr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    87
        delete addr16;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    88
        }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    89
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    90
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    91
		TWapAddr addr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    92
		addr.SetWapPort(TWapPortNumber(aPort));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    93
		addr.SetWapAddress(aHost);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    94
		aAddr=addr;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    95
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    96
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    97
void CSWSWapMsgUtils::AnalyseAddrL(TSockAddr& aAddr, Wap::TBearer aBearer, TDes8& aHost, Wap::TPort& aPort)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    98
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    99
Analyse a socket address, and generate host name and port
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   100
@internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   101
@released
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   102
@since v8.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   103
@param aAddr the socket address to be analysed
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   104
@param aBearer the underlie bearer type
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   105
@param aHost the host name
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   106
@param aHost the port number
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   107
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   108
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   109
	aPort=static_cast<Wap::TPort>(aAddr.Port());
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   110
	if (aBearer==Wap::EIP)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   111
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   112
		TInetAddr addr(aAddr);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   113
		// If the family is KAfInet6, the output buffer must be at least 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   114
		// 39 characters. 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   115
		// If less, the buffer is filled with '*' characters.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   116
		HBufC16* addr16=HBufC16::NewL(40);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   117
		TPtr16 addr16Des=addr16->Des();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   118
		addr.Output(addr16Des);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   119
		aHost.Copy(addr16Des);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   120
		delete addr16;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   121
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   122
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   123
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   124
		TWapAddr& wapAddr = *(reinterpret_cast<TWapAddr*>(&aAddr));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   125
		TPtrC8 addr=wapAddr.WapAddress();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   126
		aHost.Copy(addr);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   127
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   128
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   129