dvrengine/CommonRecordingEngine/src/CCRRTSPCommand.cpp
changeset 41 d88d70d98bbc
parent 34 814ba97beeb9
child 46 3bc36dbd63c2
--- a/dvrengine/CommonRecordingEngine/src/CCRRTSPCommand.cpp	Fri Jun 11 10:05:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,761 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:    RTSP command parser and producer*
-*/
-
-
-
-
-// INCLUDE FILES
-#include "CCRRtspCommand.h"
-#include "CCRSock.h"
-#include <imcvcodc.h>
-#include <Hash.h>
-#include "videoserviceutilsLogger.h"
-
-// CONSTANTS
-const TReal KRealZero( 0.0 ); 
-const TReal KRealMinusOne( -1.0 ); 
-// Length of a digest hash before converting to hex.
-const TInt KCRRawHashLength( 16 );
-// Length of a digest hash when represented in hex
-const TInt KCRHashLength( 32 );
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCRRtspCommand* CCRRtspCommand::NewL()
-    {
-    CCRRtspCommand* self = new( ELeave ) CCRRtspCommand();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::CCRRtspCommand
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CCRRtspCommand::CCRRtspCommand()
-  : iCommand( ERTSPCommandNOCOMMAND )
-    {  
-    // None
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCRRtspCommand::ConstructL()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::~CCRRtspCommand
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CCRRtspCommand::~CCRRtspCommand()
-    {
-    LOG( "CCRRtspCommand::~CCRRtspCommand" );
-    
-    // iRtspText is deleted in base class destructor
-    delete iAuthHeader;
-    delete iMD5Calculator;
-    delete iUserAgent;
-    delete iWapProfile;
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::TryParseL
-// 
-// -----------------------------------------------------------------------------
-//
-void CCRRtspCommand::TryParseL( const TDesC8 &aString ) 
-    {
-    // try to find out if end of the command has been received
-    // "RTSP/1.0 XXX\r\n\r\n" at least..
-    const TInt KDVRMinCommandLen( 14 ); 
-    TInt replyEndOffSet( ( aString.Length() < KDVRMinCommandLen )?
-                           KDVRMinCommandLen: aString.Find( KCR2NewLines() ) ); 
-    if ( replyEndOffSet == KErrNotFound )
-        {
-        // need to have more, do nothing yet
-        LOG( "CCRRtspCommand::TryParseL() out because response not complete" );
-        User::Leave( KErrUnderflow ); 
-        }
-
-    // copy the stuff into local variable:      
-    delete iRtspText; iRtspText = NULL; 
-    iRtspText = aString.AllocL(); 
-    iCommand = ERTSPCommandNOCOMMAND;
-
-    // try each command in order: 
-    if ( iRtspText->Find( KCROPTIONS() ) == 0 )
-        {
-        // it was OPTIONS command
-        LOG( "CCRRtspCommand::TryParseL() -> OPTIONS" );
-        iCommand = ERTSPCommandOPTIONS;
-        }
-    else if ( iRtspText->Find( KCRDESCRIBE() ) == 0 )
-        {
-        LOG( "CCRRtspCommand::TryParseL() -> DESCRIBE" );
-        iCommand = ERTSPCommandDESCRIBE;
-        }  
-    else if ( iRtspText->Find( KCRTEARDOWN() ) == 0 )
-        {
-        LOG( "CCRRtspCommand::TryParseL() -> TEARDOWN" );
-        iCommand = ERTSPCommandTEARDOWN;        
-        }                   
-    else if ( iRtspText->Find( KCRPAUSE() ) == 0 )
-        {
-        LOG( "CCRRtspCommand::TryParseL() -> PAUSE" );
-        iCommand = ERTSPCommandPAUSE;       
-        }                                       
-    else if ( iRtspText->Find( KCRSETUP() ) == 0 )
-        {
-        LOG( "CCRRtspCommand::TryParseL() -> SETUP" );
-        iCommand = ERTSPCommandSETUP;       
-        }
-    else if ( iRtspText->Find( KCRPLAY() ) == 0 )
-        {
-        LOG( "CCRRtspCommand::TryParseL() -> PLAY" );
-        iCommand = ERTSPCommandPLAY;        
-        }  
-    else
-        {
-        User::Leave( KErrNotSupported ); 
-        }
-
-    // then find CSeq
-    FindCSeqL();    
-    // then find session id
-    FindSessionIdL(); 
-    // then find possible content. for commands it is usually not there
-    FindContentL(); 
-    // find URL
-    FindURLL(); 
-    // find possible transport method
-    // IMPORTANT: should be done before parsing client port
-    FindTransport();
-    // find possible client port
-    FindClientPorts();
-    // find possible range-header
-    ParseRange();
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::FindURLL
-// in rtsp the URL is between first and second whitespace.
-// -----------------------------------------------------------------------------
-//
-void CCRRtspCommand::FindURLL( void ) 
-    {
-#ifdef _DEBUG   
-    _LIT( KPanicStr, "RTSPCommon" ); 
-    __ASSERT_DEBUG( iRtspText, 
-                    User::Panic( KPanicStr, KErrBadHandle ) );
-#endif                    
-    
-    iURL.Set( NULL, 0 );
-    TInt spaceOffset( iRtspText->Locate( ' ' ) ); 
-    if ( spaceOffset < 0 ) 
-        {
-        User::Leave( KErrNotSupported ); 
-        }
-        
-    TPtrC8 beginningFromUrl( iRtspText->Right( iRtspText->Length() - 
-                                             ( spaceOffset + 1 ) ) ) ;      
-    spaceOffset = beginningFromUrl.Locate( ' ' ); 
-    if ( spaceOffset < 0 ) 
-        {
-        User::Leave( KErrNotSupported ); 
-        }
-    
-    iURL.Set( beginningFromUrl.Left( spaceOffset ) ); 
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::URL
-//
-// method that returns URL
-// -----------------------------------------------------------------------------
-//  
-TInt CCRRtspCommand::URL( TPtrC8& aURL ) 
-    {
-    if ( iURL.Ptr() != NULL )   
-        {
-        aURL.Set ( iURL ); 
-        return KErrNone;
-        }
-
-    return KErrNotFound; 
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::SetURL
-//
-// -----------------------------------------------------------------------------
-//  
-void CCRRtspCommand::SetURL ( const TDesC8& aURL ) 
-    {
-    iURL.Set ( aURL ); 
-    }
-    
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::SetAuthentication
-//
-// -----------------------------------------------------------------------------
-//  
-void CCRRtspCommand::SetAuthentication( TBool aAuth ) 
-    {
-    iAuthenticationNeeded = aAuth;
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::SetUserAgentL
-//
-// -----------------------------------------------------------------------------
-//  
-void CCRRtspCommand::SetUserAgentL( const TDesC8& aUserAgent )
-    {
-    delete iUserAgent; iUserAgent = NULL;
-    iUserAgent = aUserAgent.AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::SetBandwidth
-//
-// -----------------------------------------------------------------------------
-//  
-void CCRRtspCommand::SetBandwidth( TInt aBandwidth )
-    {
-    iBandwidth = aBandwidth;
-    iBandwidthAvailable = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::SetWapProfileL
-//
-// -----------------------------------------------------------------------------
-//  
-void CCRRtspCommand::SetWapProfileL( const TDesC8& aWapProfile )
-    {
-    delete iWapProfile; iWapProfile = NULL;
-    iWapProfile = aWapProfile.AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::SetCommand
-//
-// -----------------------------------------------------------------------------
-//  
-void CCRRtspCommand::SetCommand( TCommand aCommand ) 
-    {
-    iCommand = aCommand; 
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::Command
-//
-// -----------------------------------------------------------------------------
-//  
-CCRRtspCommand::TCommand CCRRtspCommand::Command( void ) const 
-    {
-    return iCommand;    
-    }       
-            
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::ProduceL
-//
-// -----------------------------------------------------------------------------
-//  
-TPtrC8& CCRRtspCommand::ProduceL( void ) 
-    {
-    // First common part for all commands, except actual command
-    delete iRtspText; iRtspText = NULL;
-    iRtspText = HBufC8::NewL( KMaxName );
-    iRtspText->Des().Zero();
-    
-    switch ( iCommand )
-        {
-        case ERTSPCommandOPTIONS:
-            AppendL( iRtspText, KCROPTIONS ); 
-            break;
-        
-        case ERTSPCommandDESCRIBE:
-            AppendL( iRtspText, KCRDESCRIBE ); 
-            break;
-        
-        case ERTSPCommandTEARDOWN:     
-            AppendL( iRtspText, KCRTEARDOWN ); 
-            break;
-        
-        case ERTSPCommandPAUSE:
-            AppendL( iRtspText, KCRPAUSE ); 
-            break;
-        
-        case ERTSPCommandSETUP:        
-            AppendL( iRtspText, KCRSETUP ); 
-            break;
-        
-        case ERTSPCommandPLAY : 
-            AppendL( iRtspText, KCRPLAY ); 
-            break;
-        
-        default:
-            User::Leave( KErrNotSupported ); 
-            break;
-        }
-    
-    AppendL( iRtspText, iURL ); 
-    AppendL( iRtspText, KCRSpace ); 
-    AppendL( iRtspText, KCRRTSP10 ); 
-    AppendL( iRtspText, KCRNewLine ); 
-    AppendL( iRtspText, KCRCSeq ); 
-    AppendNumL( iRtspText, iCSeq );
-    AppendL( iRtspText, KCRNewLine );
-
-    if ( iUserAgent )
-        {
-        TPtrC8 useragent( iUserAgent->Des() );
-        AppendFormatL( iRtspText, KCRRTSPUserAgentHeader, &useragent );
-        }
-
-    // then variable tail depending on command
-    switch ( iCommand )
-        {
-        case ERTSPCommandOPTIONS:
-            if ( iSessionId.Ptr() != NULL ) 
-                {
-                AppendL( iRtspText, KCRSessionStr() ); 
-                AppendL( iRtspText, iSessionId ); // now only session number
-                AppendL( iRtspText, KCRNewLine );                
-                }
-            break;
-        
-        case ERTSPCommandDESCRIBE:
-            {
-            AppendL( iRtspText, KCRAcceptSDP );
-            if ( iWapProfile )
-                {
-                TPtrC8 profile = iWapProfile->Des();
-                AppendFormatL( iRtspText, KCRRTSPXWapProfile, &profile );
-                }
-            if ( iBandwidthAvailable )
-                {
-                AppendFormatL( iRtspText, KCRRTSPBandwidth, iBandwidth );
-                }
-            }
-            break;
-        
-        case ERTSPCommandTEARDOWN:     
-            if ( iSessionId.Ptr() != NULL ) 
-                {
-                AppendL( iRtspText, KCRSessionStr() ); 
-                AppendL( iRtspText, iSessionId ); // now only session number
-                AppendL( iRtspText, KCRNewLine );                
-                }
-            break;
-
-        case ERTSPCommandPAUSE:        
-            if ( iSessionId.Ptr() != NULL ) 
-                {
-                AppendL( iRtspText, KCRSessionStr() ); 
-                AppendL( iRtspText, iSessionId ); // now only session number
-                AppendL( iRtspText, KCRNewLine );                
-                }
-            break;
-
-        case ERTSPCommandSETUP:        
-            {
-            // build transport header according to chosen method
-            switch ( iTransport )
-                {
-                case ERTPOverUDP:
-                    AppendFormatL( iRtspText, KCRTransportHeaderUDP,
-                                   iClientPort, iClientPort + 1 );
-                    break;
-                case ERTPOverTCP:
-                    AppendFormatL( iRtspText, KCRTransportHeaderTCP,
-                                   iClientPort, iClientPort + 1 );
-                    break;
-                
-                case ERTPOverMulticast:
-                    AppendL( iRtspText, KCRTransportHeaderMulticast );
-                    break;
-                }
-
-            // Session: 5273458854096827704         
-            if ( iSessionId.Ptr() != NULL ) 
-                {
-                AppendL( iRtspText, KCRSessionStr ); 
-                AppendL( iRtspText, iSessionId ); // now only session number
-                AppendL( iRtspText, KCRNewLine ); 
-                }
-            if ( iWapProfile )
-                {
-                TPtrC8 profile( iWapProfile->Des() );
-                AppendFormatL( iRtspText, KCRRTSPXWapProfile, &profile );
-                }
-            }
-            break;
-            
-        case ERTSPCommandPLAY: 
-            {
-            if ( !( iLowerRange == KRealZero && iUpperRange == KRealMinusOne ) )
-                {
-                // Range was something else than 0,-1
-                TBuf8<KMaxName> buf( KCRRangeHeader );
-                TRealFormat format( 10, 3 ); 
-                format.iTriLen = 0; 
-                format.iPoint = '.';
-                buf.AppendNum( iLowerRange, format );
-                buf.Append( '-' ); 
-                if ( iUpperRange > KRealZero )
-                    {
-                    buf.AppendNum( iUpperRange, format );
-                    }
-                
-                buf.Append( KCRNewLine );
-                AppendL( iRtspText, buf );
-                }
-            if ( iSessionId.Ptr() != NULL ) 
-                {
-                AppendL( iRtspText, KCRSessionStr() ); 
-                AppendL( iRtspText, iSessionId ); // now only session number
-                AppendL( iRtspText, KCRNewLine ); 
-                }
-            }
-            break;
-
-        default:
-            User::Leave( KErrNotSupported ); 
-            break;
-        }           
-    
-    if ( iAuthenticationNeeded )
-        {
-        TBool useDigest( EFalse );
-        
-        if ( iAuthType && ( iAuthType->FindC( KCRAuthDigest ) != KErrNotFound ) )
-            {
-            useDigest = ETrue;
-            }
-        
-        switch ( iCommand )
-            {
-            case ERTSPCommandOPTIONS :
-                useDigest ? CalculateDigestResponseL( KCROPTIONSNoSpace ) :
-                            CalculateBasicResponseL( KCROPTIONSNoSpace );
-                
-                if ( iAuthHeader ) 
-                    {
-                    AppendL( iRtspText, iAuthHeader->Des() );
-                    }
-                break;
-            
-            case ERTSPCommandDESCRIBE :
-                useDigest ? CalculateDigestResponseL( KCRDESCRIBENoSpace ) :
-                            CalculateBasicResponseL( KCRDESCRIBENoSpace );  
-               
-                if ( iAuthHeader ) 
-                    {
-                    AppendL( iRtspText, iAuthHeader->Des() );
-                    }
-                break;
-            
-            case ERTSPCommandTEARDOWN :     
-                useDigest ? CalculateDigestResponseL( KCRTEARDOWNNoSpace ) :
-                            CalculateBasicResponseL( KCRTEARDOWNNoSpace );
-                
-                if ( iAuthHeader ) 
-                    {               
-                    AppendL( iRtspText, iAuthHeader->Des() );
-                    }
-                break;
-            
-            case ERTSPCommandPAUSE :        
-                useDigest ? CalculateDigestResponseL( KCRPAUSENoSpace ) :
-                            CalculateBasicResponseL( KCRPAUSENoSpace );
-                
-                if ( iAuthHeader ) 
-                    {           
-                    AppendL( iRtspText, iAuthHeader->Des() );
-                    }
-                break;
-            
-            case ERTSPCommandSETUP :        
-                useDigest ? CalculateDigestResponseL( KCRSETUPNoSpace ) :
-                            CalculateBasicResponseL( KCRSETUPNoSpace );
-                
-                if ( iAuthHeader ) 
-                    {
-                    AppendL( iRtspText, iAuthHeader->Des() );
-                    }
-                break;
-            
-            case ERTSPCommandPLAY :  
-                useDigest ? CalculateDigestResponseL( KCRPLAYNoSpace ) :
-                            CalculateBasicResponseL( KCRPLAYNoSpace );
-                
-                if ( iAuthHeader ) 
-                    {           
-                    AppendL( iRtspText, iAuthHeader->Des() );
-                    }
-                break;
-            
-            default:
-                User::Leave( KErrNotSupported ); 
-                break;
-            }       
-        }
-        
-    AppendL( iRtspText, KCRNewLine ); 
-    iProductDescriptor.Set( *iRtspText );
-    return iProductDescriptor;
-    }   
-    
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::AppendL
-//
-// -----------------------------------------------------------------------------
-//      
-void CCRRtspCommand::AppendL( HBufC8*& aBuffer, const TDesC8& aStr )
-    {
-    TPtr8 ptr( aBuffer->Des() );
-    if ( ( ptr.Length() + aStr.Length() ) >= ptr.MaxLength() )
-        {
-        const TInt newLength( ptr.Length() + aStr.Length() + KMaxName );
-        aBuffer = aBuffer->ReAllocL( newLength );
-        ptr.Set( aBuffer->Des() );
-        }
-    
-    ptr.Append( aStr );
-    }
-    
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::AppendNumL
-//
-// -----------------------------------------------------------------------------
-//      
-void CCRRtspCommand::AppendNumL( HBufC8*& aBuffer, const TInt aNum )
-    {
-    TPtr8 ptr( aBuffer->Des() );
-    if ( ( ptr.Length() + KMaxInfoName ) >= ptr.MaxLength() )
-        {
-        const TInt newLength( ptr.Length() + KMaxInfoName + KMaxName );
-        aBuffer = aBuffer->ReAllocL( newLength );
-        ptr.Set( aBuffer->Des() );
-        }
-    
-    ptr.AppendNum( aNum );
-    }
-    
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::AppendFormatL
-//
-// -----------------------------------------------------------------------------
-//      
-void CCRRtspCommand::AppendFormatL(
-    HBufC8*& aBuffer,
-    TRefByValue<const TDesC8> aFmt, ... )
-    {
-    VA_LIST list;
-    VA_START( list, aFmt );
-    HBufC8* buf = HBufC8::NewLC( KMaxDataSize );
-    buf->Des().FormatList( aFmt, list );
-    VA_END( list );
-
-    TPtr8 ptr( aBuffer->Des() );
-    if ( ( ptr.Length() + buf->Length() ) >= ptr.MaxLength() )
-        {
-        const TInt newLength( ptr.Length() + buf->Length() + KMaxName );
-        aBuffer = aBuffer->ReAllocL( newLength );
-        ptr.Set( aBuffer->Des() );
-        }
-    
-    ptr.Append( *buf );
-    CleanupStack::PopAndDestroy( buf );
-    }
-    
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::Hash
-// Calculates hash value ( from S60 HttpFilters )
-// -----------------------------------------------------------------------------
-//
-void CCRRtspCommand::HashL( const TDesC8& aMessage, TDes8& aHash )
-    {
-    LOG( "CCRRtspCommand::HashL() in" );
-    // check if md5 calculator is already constructed
-    if ( !iMD5Calculator )
-        { 
-        iMD5Calculator = CMD5::NewL();
-        }
-    // Calculate the 128 bit (16 byte) hash
-    iMD5Calculator->Reset();
-    TPtrC8 hash = iMD5Calculator->Hash( aMessage );
-    
-    // Now print it as a 32 byte hex number
-    aHash.Zero();
-    _LIT8( formatStr, "%02x" );
-    TBuf8<2> scratch;
-    for ( TInt i( 0 ); i < KCRRawHashLength; i++ )
-        {
-        scratch.Zero();
-        scratch.Format( formatStr, hash[i] );
-        aHash.Append( scratch );
-        }
-    
-    LOG( "CCRRtspCommand::HashL() out" );
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::CalculateBasicResponseL
-//
-// -----------------------------------------------------------------------------
-//
-void CCRRtspCommand::CalculateBasicResponseL( const TDesC8& /*aMethod*/ )
-    {
-    LOG( "CCRRtspCommand::CalculateBasicResponseL() in" );
-    
-    if ( !( iUserName && iPassword  ) )
-        {
-        LOG( "CCRRtspCommand::CalculateBasicResponseL() out, username or password not set" );
-        delete iAuthHeader; 
-        iAuthHeader = NULL;
-        return; // no can do
-        }
-    
-    HBufC8* plainData = HBufC8::NewL( iUserName->Length() + 1 + // ':'
-                                      iPassword->Length() );
-    
-    CleanupStack::PushL( plainData );
-    
-    plainData->Des().Append( *iUserName );
-    plainData->Des().Append( ':' );
-    plainData->Des().Append( *iPassword );
-    
-    // Max size = ((Bytes + 3 - (Bytes MOD 3)) /3) x 4 
-    TInt base64MaxSize = ( ( plainData->Length() + 3 - 
-            ( plainData->Length() % 3 ) ) / 3 ) * 4;
-    
-    HBufC8* encodedData = HBufC8::NewL( base64MaxSize );
-    TPtr8 dataPrt( encodedData->Des() );   
-    CleanupStack::PushL( encodedData );
-    
-    TImCodecB64 b64enc;
-    b64enc.Initialise();
-    b64enc.Encode( *plainData, dataPrt );
-    
-    delete iAuthHeader; 
-    iAuthHeader = NULL;
-    iAuthHeader = HBufC8::NewL( KCRAuthorizationBasicHeader().Length() + encodedData->Length() );           
-    iAuthHeader->Des().Format( KCRAuthorizationBasicHeader, encodedData );
-    
-    CleanupStack::PopAndDestroy( encodedData );
-    CleanupStack::PopAndDestroy( plainData );
-    
-    LOG( "CCRRtspCommand::CalculateBasicResponseL() out" );
-    }
-
-// -----------------------------------------------------------------------------
-// CCRRtspCommand::CalculateDigestResponseL
-//
-// -----------------------------------------------------------------------------
-//
-void CCRRtspCommand::CalculateDigestResponseL( const TDesC8& aMethod )
-    {
-    LOG( "CCRRtspCommand::CalculateDigestResponseL() in" );
-
-    if ( !( iUserName && iPassword && iNonce && iOpaque && iRealm && iUri ) )
-        {
-        LOG( "CCRRtspCommand::CalculateDigestResponseL() out, username or password not set" );
-        delete iAuthHeader; iAuthHeader = NULL;
-        return; // no can do
-        }
-
-    TBuf8<KCRHashLength> hash1;
-    TBuf8<KCRHashLength> hash2;
-    TBuf8<KCRHashLength> finalHash;
-
-    // calculate the hash1 using "username:realm:password"
-    HBufC8* hashPtr = HBufC8::NewL ( iUserName->Length() + 1 +  // ':'
-                                     iRealm->Length() + 1 +      // ':' 
-                                     iPassword->Length() );
-    hashPtr->Des().Append( *iUserName );
-    hashPtr->Des().Append( ':' );
-    hashPtr->Des().Append( *iRealm );
-    hashPtr->Des().Append( ':' );
-    hashPtr->Des().Append( *iPassword );
-    
-    HashL( *hashPtr, hash1 );
-    delete hashPtr; hashPtr = NULL;
-
-    // calculate hash2 using "Method:uri"
-    HBufC8* hashPtr2 = HBufC8::NewL(aMethod.Length() + 1 + iUri->Length() );
-    hashPtr2->Des().Append( aMethod );
-    hashPtr2->Des().Append( ':' );
-    hashPtr2->Des().Append( *iUri );
-    
-    HashL( *hashPtr2, hash2 );
-    delete hashPtr2; hashPtr2 = NULL;
-
-    // calculate finalHash to be sent to remote server using
-    // hash1 + ":" + nonce + ":" + hash2
-    HBufC8* hashPtr3 = HBufC8::NewL( hash1.Length() + 1 + // ':'
-                                     iNonce->Length() + 1 + // ':'
-                                     hash2.Length() );
-    hashPtr3->Des().Append( hash1 );
-    hashPtr3->Des().Append( ':' );
-    hashPtr3->Des().Append( *iNonce );
-    hashPtr3->Des().Append( ':' );
-    hashPtr3->Des().Append( hash2 );
-
-    HashL( *hashPtr3, finalHash );
-    delete hashPtr3; hashPtr3 = NULL;
-
-    // generate the authentication header 
-    if ( iOpaque->Length()  ) 
-        {
-        delete iAuthHeader; iAuthHeader = NULL;
-        iAuthHeader = HBufC8::NewL( KCRAuthorizationHeader().Length() + 
-            iUserName->Length() + iRealm->Length() + iNonce->Length() +
-            iUri->Length() + finalHash.Length() + iOpaque->Length() );
-        
-        iAuthHeader->Des().Format( KCRAuthorizationHeader, iUserName,
-            iRealm, iNonce, iUri, &finalHash, iOpaque );
-        }
-    else
-        {
-        delete iAuthHeader; iAuthHeader = NULL;
-        iAuthHeader = HBufC8::NewL( KCRAuthorizationHeaderNoOpaque().Length() +
-            iUserName->Length() + iRealm->Length() + iNonce->Length() +
-            iUri->Length() + finalHash.Length() );
-                                    
-        iAuthHeader->Des().Format( KCRAuthorizationHeaderNoOpaque, iUserName,
-            iRealm, iNonce, iUri, &finalHash );
-        }
-
-    LOG( "CCRRtspCommand::CalculateDigestResponseL() out" );   
-    }
-
-//  End of File