rtp/rtpstack/src/rtpsdes.cpp
author Petteri Saari <petteri.saari@digia.com>
Thu, 02 Dec 2010 15:23:48 +0200
branchMSRP_FrameWork
changeset 60 7634585a4347
parent 0 307788aac0a8
permissions -rw-r--r--
This release addresses the following: - Multiple concurrent file transfer bug fixes. i.e. one device is concurrently receiving multiple files from multiple devices

/*
* Copyright (c) 2002-2003 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:   
*
*/




// INCLUDES
#include <rtpdef.h>

#include "rtputil.h"
#include "rtpsdes.h"

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------------------------
// C++ default constructor can NOT contain any code, that
// might leave.
// ---------------------------------------------------------------------------
//
CRtpSDES::CRtpSDES() 
    {
    }

// ---------------------------------------------------------------------------
// Symbian 2nd phase constructor can leave.
// ---------------------------------------------------------------------------
//
void CRtpSDES::ConstructL()
    {
    for ( TInt k = 0; k < ERTCP_NUM_OF_SDES_ITEMS; k++ )
        {
        iSDESBuf[k] = HBufC8::NewL( KMaxSdesItemSize );
        iSDESItems[k] = const_cast<TUint8*>( iSDESBuf[k]->Des().Ptr() );
        Mem::FillZ( iSDESItems[k], KMaxSdesItemSize );
        iSDESItemsSize[k] = 0;
        }

    iSndSSRCArray = new ( ELeave ) CArrayFixFlat<TRtpSSRC>( 4 );
    }

// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CRtpSDES* CRtpSDES::NewL()
    {
    CRtpSDES* self = new ( ELeave ) CRtpSDES();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(); // self
    return self;
    }

// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CRtpSDES* CRtpSDES::NewL( const TRtpSdesParams& aSDES )
    {
    CRtpSDES* self = new ( ELeave ) CRtpSDES();
    CleanupStack::PushL( self );
    self->ConstructL();
    self->SetSDES( aSDES );
    CleanupStack::Pop(); // self
    return self;
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CRtpSDES::~CRtpSDES()
    {
    for ( TInt k = 0; k < ERTCP_NUM_OF_SDES_ITEMS; k++ )
        {
        delete iSDESBuf[k];
        iSDESItemsSize[k] = 0;
        }
	if (iSndSSRCArray)
		{
    	iSndSSRCArray->Reset();
    	delete iSndSSRCArray;
    	}
    }

// ---------------------------------------------------------------------------
// CRtpSDES::SetSDES()
// 
// ---------------------------------------------------------------------------
//
void CRtpSDES::SetSDES( const TRtpSdesParams& aSDES )
    {

    iSDESItemsSize[ERTCP_SDES_CNAME] = ( aSDES.iCName ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_CNAME], ( aSDES.iCName ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_CNAME] );
    *( iSDESItems[ERTCP_SDES_CNAME] + iSDESItemsSize[ERTCP_SDES_CNAME] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_NAME] = ( aSDES.iUserName ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_NAME], ( aSDES.iUserName ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_NAME] );
    *( iSDESItems[ERTCP_SDES_NAME] + iSDESItemsSize[ERTCP_SDES_NAME] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_EMAIL] = ( aSDES.iEmail ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_EMAIL], ( aSDES.iEmail ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_EMAIL] );
    *( iSDESItems[ERTCP_SDES_EMAIL] + iSDESItemsSize[ERTCP_SDES_EMAIL] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_PHONE] = ( aSDES.iPhoneNumber ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_PHONE], ( aSDES.iPhoneNumber ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_PHONE] );
    *( iSDESItems[ERTCP_SDES_PHONE] + iSDESItemsSize[ERTCP_SDES_PHONE] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_LOC] = ( aSDES.iLocation ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_LOC], ( aSDES.iLocation ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_LOC] );
    *( iSDESItems[ERTCP_SDES_LOC] + iSDESItemsSize[ERTCP_SDES_LOC] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_TOOL] = ( aSDES.iSwToolName ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_TOOL], ( aSDES.iSwToolName ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_TOOL] );
    *( iSDESItems[ERTCP_SDES_TOOL] + iSDESItemsSize[ERTCP_SDES_TOOL] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_NOTE] = ( aSDES.iNoticeStatus ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_NOTE], ( aSDES.iNoticeStatus ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_NOTE] );
    *( iSDESItems[ERTCP_SDES_NOTE] + iSDESItemsSize[ERTCP_SDES_NOTE] ) = '\0';

    iSDESItemsSize[ERTCP_SDES_PRIV] = ( aSDES.iPrivate ).Length();
    Mem::Copy( iSDESItems[ERTCP_SDES_PRIV], ( aSDES.iPrivate ).Ptr(),
               iSDESItemsSize[ERTCP_SDES_PRIV] );
    *( iSDESItems[ERTCP_SDES_PRIV] + iSDESItemsSize[ERTCP_SDES_PRIV] ) = '\0';

    }


// ---------------------------------------------------------------------------
// CRtpSDES::GetSDES()
// 
// ---------------------------------------------------------------------------
//
void CRtpSDES::GetSDES( TRtpSdesParams& aSDES )
    {
    ( aSDES.iCName ).Set( iSDESItems[ERTCP_SDES_CNAME],
                          iSDESItemsSize[ERTCP_SDES_CNAME] );

    ( aSDES.iUserName ).Set( iSDESItems[ERTCP_SDES_NAME],
                             iSDESItemsSize[ERTCP_SDES_NAME] );

    ( aSDES.iEmail ).Set( iSDESItems[ERTCP_SDES_EMAIL],
                          iSDESItemsSize[ERTCP_SDES_EMAIL] );

    ( aSDES.iPhoneNumber).Set( iSDESItems[ERTCP_SDES_PHONE],
                               iSDESItemsSize[ERTCP_SDES_PHONE] );

    ( aSDES.iLocation ).Set( iSDESItems[ERTCP_SDES_LOC],
                             iSDESItemsSize[ERTCP_SDES_LOC] );

    ( aSDES.iSwToolName ).Set( iSDESItems[ERTCP_SDES_TOOL],
                               iSDESItemsSize[ERTCP_SDES_TOOL] );

    ( aSDES.iNoticeStatus ).Set( iSDESItems[ERTCP_SDES_NOTE], iSDESItemsSize[ERTCP_SDES_NOTE] );

    ( aSDES.iPrivate ).Set( iSDESItems[ERTCP_SDES_PRIV], iSDESItemsSize[ERTCP_SDES_PRIV] );
    }

// ---------------------------------------------------------------------------
// CRtpSDES::AddSsrcToSdesL()
// 
// ---------------------------------------------------------------------------
//
void CRtpSDES::AddSsrcToSdesL( const TRtpSSRC aSSRC )
    {
    TInt index = 0;
    TBool fFoundSSRC = EFalse;
    TInt totalSSRC = iSndSSRCArray->Count();

    if ( totalSSRC > 0 )
        {
        for ( index = 0; index < totalSSRC; index++ )
            {
            if ( iSndSSRCArray->At( index ) == aSSRC )
                {
                fFoundSSRC = ETrue;
                }
            }
        if ( !fFoundSSRC )
            {
            iSndSSRCArray->AppendL( aSSRC );
            }
        }
    else  //first SSRC, added to array
        {
        iSndSSRCArray->AppendL( aSSRC );
        }
    }

// ---------------------------------------------------------------------------
// TBool CRtpSDES::GetSdesSsrc()
// 
// ---------------------------------------------------------------------------
//
TBool CRtpSDES::GetSdesSsrc( TRtpSSRC aSSRC )
    {
    TInt totalSSRC = iSndSSRCArray->Count();

    for ( TInt index = 0; index < totalSSRC; index++ )
        {
        if ( iSndSSRCArray->At( index ) == aSSRC )
            {
            return ETrue;
            }
        }
    return EFalse;
    }


//  End of File