diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/csock/CS_NET.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/csock/CS_NET.CPP Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,231 @@ +// Copyright (c) 1997-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 "CS_STD.H" + +// +// Byte Order +// Might make this lot inline... +// + +#pragma warning( disable : 4244 ) // possible loss of data warning + + +EXPORT_C TUint32 ByteOrder::Swap32(TUint32 aVal) +/** Reverses the order of the bytes in a 32-bit value. + +@param aVal The value to reverse. +@return The reversed value. */ + { + return ((aVal>>24)&0xff) | ((aVal>>8)&0xff00) | ((aVal<<8)&0xff0000) | ((aVal<<24)&0xff000000); + } + +EXPORT_C TUint16 ByteOrder::Swap16(TUint16 aVal) +/** Reverses the order of the bytes in a 16-bit value. + +@param aVal The value to reverse. +@return The reversed value. */ + { + return ((aVal>>8) & 0xff) | ((aVal<<8) & 0xff00); + } + +EXPORT_C TUint32 BigEndian::Get32(const TUint8 *aPtr) +/** Gets a 32-bit integer value which is in big-endian format from a byte stream. + +@param aPtr A pointer to a byte stream. +@return A 32-bit long integer value in native machine format. */ + { + return (aPtr[0]<<24) | (aPtr[1]<<16) | (aPtr[2]<<8) | aPtr[3]; + } + +EXPORT_C void BigEndian::Put32(TUint8 *aPtr, TUint32 aVal) +/** Inserts a 32-bit value into a byte stream in big-endian format. + +@param aPtr A pointer to a byte stream. +@param aVal A 32-bit long integer value in native machine format. */ + { + aPtr[0] = aVal >> 24; + aPtr[1] = (aVal >> 16) & 0xff; + aPtr[2] = (aVal >> 8) & 0xff; + aPtr[3] = aVal & 0xff; + } + +EXPORT_C TUint16 BigEndian::Get16(const TUint8 *aPtr) +/** Gets a 16-bit value integer which is in big-endian format from a byte stream. + +@param aPtr A pointer to a byte stream. +@return A 16-bit long integer value in native machine format. */ + { + return (aPtr[0]<<8) | aPtr[1]; + } + +EXPORT_C void BigEndian::Put16(TUint8 *aPtr, TUint16 aVal) +/** Inserts a 16-bit value into a byte stream in big-endian format. + +@param aPtr A pointer to a byte stream. +@param aVal A 16-bit long integer value in native machine format. */ + { + aPtr[0] = aVal >> 8; + aPtr[1] = aVal & 0xff; + } + +EXPORT_C TUint32 LittleEndian::Get32(const TUint8 *aPtr) +/** Gets a 32-bit integer value which is in little-endian format from a byte stream. + +@param aPtr A pointer to a byte stream. +@return A 32-bit long integer value in native machine format. */ + { + return (aPtr[3]<<24) | (aPtr[2]<<16) | (aPtr[1]<<8) | aPtr[0]; + } + +EXPORT_C void LittleEndian::Put32(TUint8 *aPtr, TUint32 aVal) +/** Inserts a 32-bit value into a byte stream in little-endian format. + +@param aPtr A pointer to a byte stream +@param aVal A 32-bit long integer value in native machine format. */ + { + aPtr[3] = aVal >> 24; + aPtr[2] = (aVal >> 16) & 0xff; + aPtr[1] = (aVal >> 8) & 0xff; + aPtr[0] = aVal & 0xff; + } + +EXPORT_C TUint16 LittleEndian::Get16(const TUint8 *aPtr) +/** Gets a 16-bit value integer which is in little-endian format from a byte stream. + +@param aPtr A pointer to a byte stream. +@return A 16-bit long in native machine format. */ + { + return (aPtr[1]<<8) | aPtr[0]; + } + +EXPORT_C void LittleEndian::Put16(TUint8 *aPtr, TUint16 aVal) +/** Inserts a 16-bit value into a byte stream in little-endian format. + +@param aPtr A pointer to a byte stream. +@param aVal A 32-bit long integer value in native machine format. */ + { + aPtr[0] = aVal & 0xff; + aPtr[1] = aVal >> 8; + } + +#pragma warning( default : 4244 ) // possible loss of data warning + + +// +// Socket Address +// + +EXPORT_C TSockAddr::TSockAddr() + : TBuf8() +/** Default constructor initialises the address to be zero-filled. */ + { + SetLength(KMaxSockAddrSize); + SetFamily(KAFUnspec); + } + +EXPORT_C TSockAddr::TSockAddr(TUint aFamily) +/** +Constructs the address with the family member data specified. + +@released. +@param aFamily, Address family of address object. +*/ + : TBuf8() +/** Constructs the address with the family member data specified. + +@param aFamily Address family Id. */ + { + SetLength(KMaxSockAddrSize); + SetFamily(aFamily); + } + +EXPORT_C TUint TSockAddr::Family() const +/** Gets the address family and thereby the type of address. The family may be +used to effect 'down-casting'. + +@return Address family Id. */ + { + return BasePtr()->iFamily; + } + +EXPORT_C void TSockAddr::SetFamily(TUint aFamily) +/** Sets the address family of an address. + +@param aFamily Address family Id. */ + { + BasePtr()->iFamily = aFamily; + } + +EXPORT_C void TSockAddr::SetPort(TUint aPort) +// +// Set Generic Port +// +/** Sets the address port of an address. + +@param aPort New port value for address */ + { + BasePtr()->iPort = aPort; + } + +EXPORT_C TUint TSockAddr::Port() const +// +// Get Generic Port +// +/** Gets the port value. + +@return Port value */ + { + return BasePtr()->iPort; + } + +EXPORT_C TBool TSockAddr::CmpPort(const TSockAddr &anAddr) const +/** +Compare two ports. + +Compares ports in two addresses + +@param anAddr, socket address. +@return ETrue if the ports match and EFalse if they do not +*/ + { + return (BasePtr()->iFamily==anAddr.BasePtr()->iFamily) + && (BasePtr()->iPort==anAddr.BasePtr()->iPort); + } + +EXPORT_C void TSockAddr::SetUserLen(TInt aLen) +// +// Set descriptor length to actual length of +// subclass. +// +/** Sets the length of data it appends after the base class' data. This function +is mainly intended for use in derived classes. + +@param aLen New length for appended data. */ + { + SetLength(aLen+Align4(sizeof(SSockAddr))); + } + +EXPORT_C TInt TSockAddr::GetUserLen() +// +// Get length of user part of TSockAddr +// +/** Gets the number of bytes a derived class has set beyond the SSockAddr part +of the address. This function is mainly intended for use in derived classes. + +@return User length */ + { + return Length()-Align4(sizeof(SSockAddr)); + }