diff -r 000000000000 -r a4daefaec16c voipplugins/sipconnectionprovider/src/scputility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/sipconnectionprovider/src/scputility.cpp Mon Jan 18 20:12:36 2010 +0200 @@ -0,0 +1,277 @@ +/* +* Copyright (c) 2007-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: Provides static utility functions for SCP +* +*/ + + +#include +#include +#include +#include + +#include "scputility.h" +#include "scplogger.h" + +const TScpUtility::SCchErrorMapping TScpUtility::iErrorTable[] = + { + { KCCHErrorInvalidSettings, KErrArgument }, + { KCCHErrorAccessPointNotDefined, KErrBadName }, + { KCCHErrorAuthenticationFailed, KErrSIPForbidden } + }; + +// ----------------------------------------------------------------------------- +// TScpUtility::ConvertToConnectionEvent +// ----------------------------------------------------------------------------- +// +TScpConnectionEvent TScpUtility::ConvertToConnectionEvent( + CScpSipConnection::TConnectionState aState, + TInt aError ) + { + TScpConnectionEvent returnEvent( EScpUnknown ); + + switch( aState ) + { + case CScpSipConnection::ERegistered: + { + returnEvent = EScpRegistered; + } + break; + + case CScpSipConnection::ERegistering: + { + if( aError == KErrNone ) + { + returnEvent = EScpNetworkFound; + } + else if( aError == KCCHErrorNetworkLost ) + { + returnEvent = EScpNetworkLost; + } + else + { + returnEvent = EScpRegistrationFailed; + } + } + break; + + case CScpSipConnection::EDeregistered: + { + returnEvent = EScpDeregistered; + } + break; + + case CScpSipConnection::EDeregistering: + { + returnEvent = EScpNetworkNotFound; + } + break; + + default: + User::Panic( KNullDesC, KErrGeneral ); + break; + } + + return returnEvent; + } + +// ----------------------------------------------------------------------------- +// TScpUtility::ConvertToConnectionEvent +// ----------------------------------------------------------------------------- +// +TScpConnectionEvent TScpUtility::ConvertToConnectionEvent( + TCCHSubserviceState aState ) + { + TScpConnectionEvent returnEvent( EScpUnknown ); + + switch( aState ) + { + case ECCHEnabled: + { + returnEvent = EScpRegistered; + } + break; + + case ECCHConnecting: + { + returnEvent = EScpNetworkFound; + } + break; + + case ECCHDisabled: + { + returnEvent = EScpDeregistered; + } + break; + + case ECCHDisconnecting: + { + returnEvent = EScpNetworkNotFound; + } + break; + + default: + User::Panic( KNullDesC, KErrGeneral ); + break; + } + + return returnEvent; + } + +// ----------------------------------------------------------------------------- +// TScpUtility::ResetAndDestroyEntries +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void TScpUtility::ResetAndDestroyEntries( TAny* anArray ) + { + SCPLOGSTRING( "TScpUtility::ResetAndDestroyEntries" ); + + RPointerArray* array = + reinterpret_cast*>( anArray ); + + if (array) + { + array->ResetAndDestroy(); + array->Close(); + } + } + +// ----------------------------------------------------------------------------- +// TScpUtility::ConvertToCchError +// ----------------------------------------------------------------------------- +// +TInt TScpUtility::ConvertToCchError( TInt aErrorCode ) + { + TInt count = sizeof( iErrorTable ) / sizeof( struct SCchErrorMapping ); + TInt error = KErrUnknown; + while( count-- ) + { + if ( iErrorTable[ count ].iProtocolError == aErrorCode ) + { + error = iErrorTable[ count ].iServiceError; + break; + } + } + return error; + } + +// ----------------------------------------------------------------------------- +// TScpUtility::RemovePrefixAndDomain +// ----------------------------------------------------------------------------- +// +TInt TScpUtility::RemovePrefixAndDomain( const TDesC8& aUsername, + RBuf8& aFormattedUsername ) + { + TInt err( KErrNone ); + + TInt startPosition = aUsername.Find( KColon() ); + if ( KErrNotFound == startPosition ) + { + startPosition = 0; + } + else + { + startPosition = ( startPosition + KColon().Length() ); + } + TInt endPos = aUsername.Find( KAt() ); + if ( KErrNotFound == endPos ) + { + endPos = ( aUsername.Length() - startPosition ); + } + else + { + endPos = ( endPos - startPosition ); + } + + TPtrC8 formatted = aUsername.Mid( startPosition, endPos ); + err = aFormattedUsername.Create( formatted.Length() ); + + if ( KErrNone == err ) + { + aFormattedUsername.Copy( formatted ); + } + + return err; + } + +// ----------------------------------------------------------------------------- +// TScpUtility::CheckSipUsername +// ----------------------------------------------------------------------------- +// +TBool TScpUtility::CheckSipUsername( const TDesC8& aUsername ) + { + TInt retval = ETrue; + + if ( KErrNotFound != aUsername.Find( KSipScheme() ) || + KErrNotFound != aUsername.Find( KAt() ) ) + { + SCPLOGSTRING( "TScpUtility::CheckSipUsername: username has prefix or domain" ); + retval = EFalse; + } + + if( aUsername == KNullDesC8 ) + { + SCPLOGSTRING( "TScpUtility::CheckSipUsername: username is empty - not allowed" ); + retval = EFalse; + } + + return retval; + } + +// ----------------------------------------------------------------------------- +// TScpUtility::CheckSipPassword +// ----------------------------------------------------------------------------- +// +TBool TScpUtility::CheckSipPassword( const TDesC8& /*aPassword*/ ) + { + TInt retval = ETrue; + + return retval; + } + +// ----------------------------------------------------------------------------- +// TScpUtility::GetValidPrefix +// ----------------------------------------------------------------------------- +// +void TScpUtility::GetValidPrefix( const TDesC8& aUsername, TDes8& aPrefix ) + { + // no prefix -> use sip: + aPrefix.Copy( KSipScheme() ); + + TInt index = aUsername.Find( KColon() ); + if ( KErrNotFound != index ) + { + index += KColon().Length(); + // if prefix isn't sip or sips, prefix isn't valid + if ( !aUsername.Left( index ).Compare( KSipScheme() ) ) + { + aPrefix.Copy( KSipScheme() ); + } + else if ( !aUsername.Left( index ).Compare( KSipsScheme() ) ) + { + aPrefix.Copy( KSipsScheme() ); + } + else + { + // prefix not valid -> use sip: + } + } + + SCPLOGSTRING2( "TScpUtility::GetValidPrefix: %S", &aPrefix ); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File