diff -r 3406c99bc375 -r 07b41fa8d1dd hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/CExprUDPMsg.cpp --- a/hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/CExprUDPMsg.cpp Thu Jul 15 20:25:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -/* -* Copyright (c) 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: IPProxy UDP protocol expression for a regular UDP message -* connection. -* -*/ - - - -// INCLUDE FILES -#include "CExprUDPMsg.h" -#include "CommRouterDefinitions.h" -#include "MExpressionObserver.h" - -#define DEBUG_FILENAME "IPProxyEngine.log" -#include "DebugPrint.h" - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CExprUDPMsg::CExprUDPMsg -// ----------------------------------------------------------------------------- -// -CExprUDPMsg::CExprUDPMsg( MExpressionObserver* aObserver ) - : iObserver( aObserver ) - { - __ASSERT_DEBUG( iObserver, User::Invariant() ); - } - -// ----------------------------------------------------------------------------- -// CExprUDPMsg::NewL -// ----------------------------------------------------------------------------- -// -CExprUDPMsg* CExprUDPMsg::NewL( MExpressionObserver* aObserver ) - { - CExprUDPMsg* self = CExprUDPMsg::NewLC( aObserver ); - CleanupStack::Pop(); - - return self; - } - -// ----------------------------------------------------------------------------- -// CExprUDPMsg::NewLC -// ----------------------------------------------------------------------------- -// -CExprUDPMsg* CExprUDPMsg::NewLC( MExpressionObserver* aObserver ) - { - CExprUDPMsg* self = new( ELeave ) CExprUDPMsg( aObserver ); - CleanupStack::PushL( self ); - - return self; - } - - -// Destructor -CExprUDPMsg::~CExprUDPMsg() - { - } - - -// ----------------------------------------------------------------------------- -// CExprUDPMsg::HandleReceivedDataL() -// ----------------------------------------------------------------------------- -// -TBool CExprUDPMsg::HandleRecievedMsgL( TDes8& aData, TInt& aStartPos, TInt& aLength ) - { - // Check if the prefix matches - aStartPos = aData.Find( KUDPPrefix ); - - if ( aStartPos != KErrNotFound ) - { - // Found a matching prefix - // Let the observer know - iObserver->FrameStarted(); - - TPtr8 dataToParse( aData.MidTPtr( aStartPos ) ); - - TInt err = TryParsingL( dataToParse, aLength ); - - if ( err != KErrNone ) - { - // corrupted data in the frame - iObserver->ProtocolErrorL( err, aData ); - // delete the corrupted data - aData.SetLength( 0 ); - } - - return ETrue; - } - else - { - return EFalse; - } - - } - -// ----------------------------------------------------------------------------- -// CExprUDPMsg::TryParsingL -// ----------------------------------------------------------------------------- -// -TInt CExprUDPMsg::TryParsingL( TDes8& aData, TInt& aLength ) - { - __ASSERT_ALWAYS( aData.Left( KUDPPrefix().Length() ) == KUDPPrefix, - User::Panic( _L("Protocol"), 1 ) ); - - // UDP:0123,000e,[Some test data] - TInt frameOverhead = - KUDPPrefix().Length() + - KHexDecimalLength + - KPortSuffix().Length() + - KHexDecimalLength + - KLengthSuffix().Length() + - KDataSuffix().Length() + - KMessageSuffix().Length(); - - if ( aData.Length() >= frameOverhead ) - { - TPtrC8 portPtr( - aData.Mid( KUDPPrefix().Length(), KHexDecimalLength ) ); - - TLex8 portLexer( portPtr ); - TUint port; - if ( portLexer.Val( port, EHex ) != KErrNone ) - { - return KErrCorrupt; - } - DEBUG_PRINT( DEBUG_STRING( "CExprUDPMsg::TryParsingL, port = %d" ), port ); - - //Check port suffix - if ( aData.Mid( KUDPPrefix().Length() + - KHexDecimalLength, KPortSuffix().Length() ) != KPortSuffix ) - { - return KErrCorrupt; - } - - TPtrC8 lengthPtr( aData.Mid( KUDPPrefix().Length() + - KHexDecimalLength + KPortSuffix().Length(), KHexDecimalLength ) ); - TLex8 lengthLexer( lengthPtr ); - TUint length; - if ( lengthLexer.Val( length, EHex ) != KErrNone ) - { - return KErrCorrupt; - } - DEBUG_PRINT( DEBUG_STRING( "CExprUDPMsg::TryParsingL, length = %d" ), length ); - - //Check length suffix - if ( aData.Mid( - KUDPPrefix().Length() + - KHexDecimalLength + - KPortSuffix().Length() + - KHexDecimalLength, KLengthSuffix().Length() ) != KLengthSuffix ) - { - return KErrCorrupt; - } - - DEBUG_PRINT( DEBUG_STRING( "CExprUDPMsg::TryParsingL, parsing data" ), length ); - - if ( aData.Length() >= TInt( frameOverhead + length ) ) - { - TInt messagePos = KUDPPrefix().Length() + - KHexDecimalLength + - KPortSuffix().Length() + - KHexDecimalLength + - KLengthSuffix().Length(); - - TPtrC8 message( aData.Mid( messagePos, length ) ); - if ( aData.Mid( messagePos + length, - KDataSuffix().Length() ) != KDataSuffix ) - { - return KErrCorrupt; - } - DEBUG_PRINT( DEBUG_STRING( "CExprUDPMsg::TryParsingL, message OK" ) ); - - if ( aData.Mid( messagePos + length + KDataSuffix().Length(), - KMessageSuffix().Length() ) != KMessageSuffix ) - { - return KErrCorrupt; - } - - // send parsed results - iObserver->FrameParsedL( port, message ); - // set the length of the handled message - aLength = frameOverhead + length; - - return KErrNone; - } - - } - return KErrNone; - } - -// End of File