connectivitylayer/isce/isaaccessextension_dll/src/pep.cpp
author mikaruus <mika.a.ruuskanen@nokia.com>
Thu, 14 Jan 2010 10:44:58 +0200
changeset 5 8ccc39f9d787
parent 0 63b37f68c1ce
permissions -rw-r--r--
New release based on our 2010wk02 release

/*
* 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 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: 
*
*/


#include <phonetisi.h>              // For phonet-header offsets like ISI_HEADER_OFFSET_MESSAGEID
#include <pipeisi.h>                // For PEP_IND_BUSY etc..
#include <pipe_sharedisi.h>         // For PN_MULTI_CREDIT_FLOW_CONTROL etc..
#include "pep.h"
#include "peptransceiver.h"
#include "iadtrace.h"
#include "pipehandler.h"
#include "router.h"                    // For DRouter
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "pepTraces.h"
#endif
// ************* DPipe methods ************* 

DPep::DPep(
        DRouter* aRouter,
        MIAD2ChannelApi* aChannel,
        TUint16 aChannelId,
        DPipeHandler& aHandler
        ):
        iRouter( aRouter ),
        iPipeHandle( 0 ),
        iChannelId( aChannelId ),
        iPipeHandler( aHandler ),
        iChannel( aChannel ),
        iDecoratedRx( NULL ),
        iDecoratedTx( NULL ),
        iMainTxRx( aRouter, aChannel ),
        iCreating( *this ),
        iCreatingEnabled( *this ),
        iDisabled( *this ),
        iDisabling( *this ),
        iEnabling( *this ),
        iEnabled( *this ),
//TBR        
        iEnableEnabled( *this ),
        iDisabledDisabled( *this ),
        iDisabledEnabled( *this ),
        iEnabledDisabled( *this ),
        iEnabledEnabled( *this ),
        iDisconnected( *this ),
        iCurrentState( NULL )
    {
    OstTraceExt4( TRACE_PIPE, DPEP_DPEP_ENTRY, ">DPep::DPep;aRouter=%x;aChannel=%x;aChannelId=%hx;aHandler=%x", ( TUint )( aRouter ), ( TUint )( aChannel ), aChannelId, ( TUint )&( aHandler ) );

    C_TRACE( ( _T( "DPep::DPep 0x%x ->" ), aChannelId ) );
    ASSERT_RESET_ALWAYS( iRouter && iChannel, EIADNullParameter | EIADFaultIdentifier5 << KFaultIdentifierShift  );
    iCurrentState = &iCreating;
    C_TRACE( ( _T( "DPep::DPep <-" ) ) );

    OstTrace0( TRACE_PIPE, DPEP_DPEP_EXIT, "<DPep::DPep" );
    }


DPep::~DPep()
    {
    OstTrace0( TRACE_PIPE, DPEP_DPEP_DES_ENTRY, ">DPep::~DPep" );

    C_TRACE( ( _T( "DPep::~DPep ->" ) ) );
    if( iDecoratedRx )
        {
        delete iDecoratedRx;
        iDecoratedRx = NULL;
        }
    if( iDecoratedTx )
        {
        delete iDecoratedTx;
        iDecoratedTx = NULL;
        }
    C_TRACE( ( _T( "DPep::~DPep <-" ) ) );

    OstTrace0( TRACE_PIPE, DPEP_DPEP_DES_EXIT, "<DPep::~DPep" );
    }

TInt DPep::SendMessage(
        TDes8& aMsg,
        TUint16 // TBR aFromChannel
        )
    {
    OstTrace1( TRACE_PIPE, DPEP_SENDMESSAGE_ENTRY, ">DPep::SendMessage;aMsg=%x", ( TUint )&( aMsg ) );

    C_TRACE( ( _T( "DPep::SendMessage From: 0x%x 0x%x ->" ), iChannelId, this ) );
    TInt retVal( KErrNotSupported );
    ASSERT_RESET_ALWAYS( aMsg.Length() > ( ISI_HEADER_OFFSET_MESSAGEID ), EIADOverTheLimits | EIADFaultIdentifier26 << KFaultIdentifierShift );                                
    switch( aMsg.Ptr()[ ISI_HEADER_OFFSET_MESSAGEID ] )
        {
        case PNS_PIPE_DATA:
            {
            retVal = iCurrentState->TxPnsPipeData( aMsg );
            break;
            }
        case PNS_PEP_STATUS_IND:// if data port _COMM
            {
            if( aMsg.Ptr()[ ISI_HEADER_SIZE + PNS_PEP_STATUS_IND_OFFSET_PEPTYPE ] == PN_PEP_TYPE_COMM )
                {
                retVal = iRouter->SendMsg( aMsg );
                }
            break;
            }
        case PNS_PEP_CTRL_RESP: // if data port _COMM
            {
            if( aMsg.Ptr()[ ISI_HEADER_SIZE + PNS_PEP_CTRL_RESP_OFFSET_PEPTYPE ] == PN_PEP_TYPE_COMM )
                {
                retVal = iRouter->SendMsg( aMsg );
                }
            break;
            }
        // Controller can send these.
        case PNS_PEP_CTRL_REQ:
        case PNS_PIPE_ENABLE_REQ:
        case PNS_PIPE_DISABLE_REQ:
        case PNS_PIPE_RESET_REQ:
        case PNS_PIPE_REDIRECT_REQ:
        case PNS_PIPE_REMOVE_REQ:
            {
            retVal = iRouter->SendMsg( aMsg );
            break;
            }
        default:
            {
            DATA_DUMP_TRACE( aMsg, ETrue );
            OstTraceData( TRACE_ISIMSG, DPEP_SENDMESSAGE, "DPep::SendMessage %{hex8[]}", aMsg.Ptr(), aMsg.Length() );
            ASSERT_RESET_ALWAYS( 0, EIADNotSupported | (TUint8)iChannelId<<KChannelNumberShift | EIADFaultIdentifier4<<KFaultIdentifierShift | aMsg.Ptr()[ ISI_HEADER_OFFSET_MESSAGEID ]<<KExtraInfoShift);
            break;
            }
        }
    C_TRACE( ( _T( "DPep::SendMessage %d 0x%x <-" ), retVal, this ) );


    OstTrace1( TRACE_PIPE, DPEP_SENDMESSAGE_EXIT, "<DPep::SendMessage;retVal=%d", retVal );
    return retVal;
    }

TInt DPep::ReceiveMessage(
        const TDesC8& aMessage,
        MIAD2ChannelApi* aChannel
        )
    {
    OstTraceExt2( TRACE_PIPE, DPEP_RECEIVEMESSAGE_ENTRY, ">DPep::ReceiveMessage;aMessage=%x;aChannel=%x", ( TUint )&( aMessage ), ( TUint )( aChannel ) );

    C_TRACE( ( _T( "DPep::ReceiveMessage 0x%x ->" ), aChannel ) );
    TInt retVal( KErrNone );
    ASSERT_RESET_ALWAYS( aMessage.Length() > ( ISI_HEADER_OFFSET_MESSAGEID ), EIADOverTheLimits | EIADFaultIdentifier27 << KFaultIdentifierShift );                                    
    switch( aMessage.Ptr()[ ISI_HEADER_OFFSET_MESSAGEID ] )
        {
        case PNS_PIPE_DATA:
            {
            retVal = iCurrentState->RxPnsPipeData( aMessage );
            break;
            }
        case PNS_PIPE_CREATED_IND:
            {
            HandlePnPipeSbNegotiatedFC( aMessage );
            iCurrentState->PnsPipeCreatedInd();
               
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PIPE_DISABLED_IND:
            {
            iCurrentState->PnsPipeDisabledInd();// TODO: checking of pipehandle
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PIPE_RESET_IND:
            {
            iCurrentState->PnsPipeResetInd();
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PIPE_ENABLED_IND:
            {
            iCurrentState->PnsPipeEnabledInd();
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PIPE_REDIRECTED_IND:
            {
            HandlePnPipeSbNegotiatedFC( aMessage );
            iCurrentState->PnsPipeRedirectedInd();
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PEP_ENABLE_REQ:
            {
            retVal = iCurrentState->PnsPepEnableReq( aMessage );
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PEP_DISCONNECT_REQ:
            {
            retVal = iCurrentState->PnsPepDisconnectReq( aMessage );
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            iPipeHandler.RemovePep(this);
            break;
            }
        case PNS_PEP_CONNECT_REQ:
            {
            // Needed to set for SOS originated pipes
            iChannel = ( NULL == iChannel ) ? aChannel : iChannel;
            retVal = iCurrentState->PnsPepConnectReq( aMessage ); 
               
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PEP_RESET_REQ:
            {
            retVal = iCurrentState->PnsPepResetReq( aMessage );
               
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PEP_DISABLE_REQ:
            {
            retVal = iCurrentState->PnsPepDisableReq( aMessage );
               
            iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
            break;
            }
        case PNS_PEP_STATUS_IND:
            {
            // TODO: Remove this if pep_type_common to be the only pep_type ( && ( ...== PN_PEP_TYPE_COMMON ) )
            ASSERT_RESET_ALWAYS( aMessage.Length() > ( ISI_HEADER_SIZE + PNS_PEP_STATUS_IND_OFFSET_PEPTYPE ), EIADOverTheLimits | EIADFaultIdentifier28 << KFaultIdentifierShift );                                    
            if( ( aMessage.Ptr()[ ISI_HEADER_SIZE + PNS_PEP_STATUS_IND_OFFSET_PEPTYPE ] == PN_PEP_TYPE_COMMON ) )
                {
                iDecoratedTx->PepStatusInd( aMessage );
                iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
                }
            else
                {
                aChannel->ReceiveMsg(aMessage); // To dataport if _COMM
                }
            break;
            }
        case PNS_PEP_CTRL_REQ:
            {
            // TODO Remove this if pep_type_common to be the only pep_type 
            ASSERT_RESET_ALWAYS( aMessage.Length() > ( ISI_HEADER_SIZE + PNS_PEP_STATUS_IND_OFFSET_PEPTYPE ), EIADOverTheLimits | EIADFaultIdentifier29 << KFaultIdentifierShift );                                    
            if( ( aMessage.Ptr()[ ISI_HEADER_SIZE + PNS_PEP_STATUS_IND_OFFSET_PEPTYPE ] != PN_PEP_TYPE_COMMON ) )
                {
                aChannel->ReceiveMsg( aMessage ); // to dataport _COMM 
                }
            else{
                retVal = iDecoratedRx->PepControlReq( aMessage );
                iRouter->DeAllocateBlock( ((TDes8&)aMessage ) );
                }
            break;
            }
        // directly to controller
        case PNS_PIPE_REMOVE_RESP:
        case PNS_PIPE_REDIRECT_RESP:
        case PNS_PIPE_ENABLE_RESP:
        case PNS_PIPE_DISABLE_RESP:
        case PNS_PIPE_RESET_RESP:
        case PNS_PIPE_CREATE_RESP:
        case PNS_PEP_CTRL_RESP:
            {
            aChannel->ReceiveMsg( aMessage );
            break;
            }
            
        default:
            {
            ASSERT_RESET_ALWAYS( 0, EIADUnknownPipeOrPepMsg | EIADFaultIdentifier1 << KFaultIdentifierShift );
            break;
            }
        }
    C_TRACE( ( _T( "DPep::ReceiveMessage 0x%x <-" ), retVal ) );


    OstTrace1( TRACE_PIPE, DPEP_RECEIVEMESSAGE_EXIT, "<DPep::ReceiveMessage;retVal=%d", retVal );
    return retVal;
    }

TInt DPep::SendPepConnectResp( const TDesC8& aReq )
    {
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPCONNECTRESP_ENTRY, ">DPep::SendPepConnectResp;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DPep::SendPepConnectResp ->" )) );
    TInt retVal = iMainTxRx.SendPnsPepConnectResp( aReq ); // Handle is stored in Tx
    C_TRACE( ( _T( "DPep::SendPepConnectResp 0x%x <-" ), retVal) );
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPCONNECTRESP_EXIT, "<DPep::SendPepConnectResp;retVal=%d", retVal );
    return retVal;
    }
    
TInt DPep::SendPepResetResp( const TDesC8& aReq )
    {
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPRESETRESP_ENTRY, ">DPep::SendPepResetResp;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DPep::SendPepResetResp ->" )) );
    TInt retVal = iMainTxRx.SendResetResp( aReq );
    C_TRACE( ( _T( "DPep::SendPepResetResp 0x%x <-" ), retVal ) );
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPRESETRESP_EXIT, "<DPep::SendPepResetResp;retVal=%d", retVal );
    return retVal;
    }
    
TInt DPep::SendPepDisconnectResp( const TDesC8& aReq )
    {
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPDISCONNECTRESP_ENTRY, ">DPep::SendPepDisconnectResp;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DPep::SendPepDisconnectResp ->" )) );
    TInt retVal =  iMainTxRx.SendPnsPepDisconnectResp( aReq );
    C_TRACE( ( _T( "DPep::SendPepDisconnectResp 0x%x <-" ), retVal) );
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPDISCONNECTRESP_EXIT, "<DPep::SendPepDisconnectResp;retVal=%d", retVal );
    return retVal;
    }

TInt DPep::SendPepEnableResp( const TDesC8& aReq )
    {
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPENABLERESP_ENTRY, ">DPep::SendPepEnableResp;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DPep::SendPepEnableResp ->" )) );
    TInt retVal =  iMainTxRx.SendEnableResp( aReq );
    C_TRACE( ( _T( "DPep::SendPepEnableResp 0x%x <-" ), retVal) );
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPENABLERESP_EXIT, "<DPep::SendPepEnableResp;retVal=%d", retVal );
    return retVal;
    }

TInt DPep::SendPepDisableResp(const TDesC8& aReq)
    {
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPDISABLERESP_ENTRY, ">DPep::SendPepDisableResp;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DPep::SendPepDisableResp ->" )) );
    TInt retVal = iMainTxRx.SendDisableResp( aReq );
    C_TRACE( ( _T( "DPep::SendPepDisableResp 0x%x <-" ), retVal) );
    OstTrace1( TRACE_PIPE, DPEP_SENDPEPDISABLERESP_EXIT, "<DPep::SendPepDisableResp;retVal=%d", retVal );
    return retVal;
    }

TInt DPep::RxPipeData( const TDesC8& aData )
    {
    OstTrace1( TRACE_PIPE, DPEP_RXPIPEDATA_ENTRY, ">DPep::RxPipeData;aData=%x", ( TUint )&( aData ) );
    C_TRACE( ( _T( "DPep::RxPipeData ->" )) );
    ASSERT_RESET_ALWAYS( iDecoratedRx, EIADNullParameter | EIADFaultIdentifier6 << KFaultIdentifierShift  );
    TInt retVal = iDecoratedRx->Receive( aData );
    C_TRACE( ( _T( "DPep::RxPipeData 0x%x <-" ), retVal) );
    OstTrace1( TRACE_PIPE, DPEP_RXPIPEDATA_EXIT, "<DPep::RxPipeData;retVal=%d", retVal );
    return retVal;    
    }

TInt DPep::TxPipeData( TDes8& aData )
    {
    OstTrace1( TRACE_PIPE, DPEP_TXPIPEDATA_ENTRY, ">DPep::TxPipeData;aData=%x", ( TUint )&( aData ) );
    C_TRACE( ( _T( "DPep::TxPipeData ->" )) );
    ASSERT_RESET_ALWAYS( iDecoratedTx, EIADNullParameter | EIADFaultIdentifier7 << KFaultIdentifierShift  );
    TInt retVal = iDecoratedTx->Send( aData );
    C_TRACE( ( _T( "DPep::TxPipeData %d <-" ), retVal) );
    OstTrace1( TRACE_PIPE, DPEP_TXPIPEDATA_EXIT, "<DPep::TxPipeData;retVal=%d", retVal );
    return retVal;
    }

void DPep::PipeEnabled()
    {
    OstTrace0( TRACE_PIPE, DPEP_PIPEENABLED_ENTRY, ">DPep::PipeEnabled" );
    C_TRACE( ( _T( "DPep::PipeEnabled ->" ) ) );
    ASSERT_RESET_ALWAYS( iDecoratedRx && iDecoratedTx, EIADNullParameter | EIADFaultIdentifier8 << KFaultIdentifierShift );
    iDecoratedRx->PipeEnabled(); 
    iDecoratedTx->PipeEnabled();
    C_TRACE( ( _T( "DPep::PipeEnabled <-" ) ) );
    OstTrace0( TRACE_PIPE, DPEP_PIPEENABLED_EXIT, "<DPep::PipeEnabled" );
    }

void DPep::PipeDisabling()
    {
    OstTrace0( TRACE_PIPE, DPEP_PIPEDISABLING_ENTRY, ">DPep::PipeDisabling" );
    C_TRACE( ( _T( "DPep::PipeDisabling ->" ) ) );
    ASSERT_RESET_ALWAYS( iDecoratedTx, EIADNullParameter | EIADFaultIdentifier9 << KFaultIdentifierShift );
    iDecoratedTx->PipeDisabled();
    C_TRACE( ( _T( "DPep::PipeDisabling <-" ) ) );
    OstTrace0( TRACE_PIPE, DPEP_PIPEDISABLING_EXIT, "<DPep::PipeDisabling" );
    }

void DPep::PipeDisabled()
    {
    OstTrace0( TRACE_PIPE, DPEP_PIPEDISABLED_ENTRY, ">DPep::PipeDisabled" );
    C_TRACE( ( _T( "DPep::PipeDisabled ->" ) ) );
    ASSERT_RESET_ALWAYS( iDecoratedRx, EIADNullParameter | EIADFaultIdentifier10 << KFaultIdentifierShift );
    // TX Already disabled (or then create new Disabling for tx's
    iDecoratedRx->PipeDisabled();
    C_TRACE( ( _T( "DPep::PipeDisabled <-" ) ) );
    OstTrace0( TRACE_PIPE, DPEP_PIPEDISABLED_EXIT, "<DPep::PipeDisabled" );
    }

void DPep::PipeEnableEnabled()
    {
    OstTrace0( TRACE_PIPE, DPEP_PIPEENABLEENABLED_ENTRY, ">DPep::PipeEnableEnabled" );
    C_TRACE( ( _T( "DPep::PipeEnableEnabled ->" ) ) );
    ASSERT_RESET_ALWAYS( iDecoratedTx, EIADNullParameter | EIADFaultIdentifier11 << KFaultIdentifierShift );
    iDecoratedTx->PipeEnabled();
    C_TRACE( ( _T( "DPep::PipeEnableEnabled <-" ) ) );
    OstTrace0( TRACE_PIPE, DPEP_PIPEENABLEENABLED_EXIT, "<DPep::PipeEnableEnabled" );
    }

void DPep::PipeDisableDisabled()
    {
    OstTrace0( TRACE_PIPE, DPEP_PIPEDISABLEDISABLED_ENTRY, ">DPep::PipeDisableDisabled" );
    C_TRACE( ( _T( "DPep::PipeDisableDisabled ->" ) ) );
    ASSERT_RESET_ALWAYS( iDecoratedRx, EIADNullParameter | EIADFaultIdentifier12 << KFaultIdentifierShift );
    TRACE_ASSERT_ALWAYS;// specifications (pipe, one- and multicredit) don't say anything about this.
    iDecoratedRx->PipeDisabled();
    C_TRACE( ( _T( "DPep::PipeDisableDisabled <-" ) ) );
    OstTrace0( TRACE_PIPE, DPEP_PIPEDISABLEDISABLED_EXIT, "<DPep::PipeDisableDisabled" );
    }

void DPep::HandlePnPipeSbNegotiatedFC(
        const TDesC8& aMsg
        )
    {
    OstTrace1( TRACE_PIPE, DPEP_HANDLEPNPIPESBNEGOTIATEDFC_ENTRY, ">DPep::HandlePnPipeSbNegotiatedFC;aMsg=%x", ( TUint )&( aMsg ) );

    C_TRACE( ( _T( "DPep::HandlePnPipeSbNegotiatedFC ->" ) ) );
    const TUint8* ptr( aMsg.Ptr() );
    TUint8 txFcType( PN_LEGACY_FLOW_CONTROL );
    TUint8 rxFcType( PN_LEGACY_FLOW_CONTROL );
    ASSERT_RESET_ALWAYS( PNS_PIPE_CREATED_IND_OFFSET_NSB == PNS_PIPE_REDIRECTED_IND_OFFSET_NSB, 0 );
    const TUint8 sbCountOffset( ( PNS_PIPE_CREATED_IND_OFFSET_NSB + PNS_PIPE_REDIRECTED_IND_OFFSET_NSB ) / 2 );
    ASSERT_RESET_ALWAYS( aMsg.Length() > ( ISI_HEADER_SIZE + sbCountOffset ), EIADOverTheLimits | EIADFaultIdentifier30 << KFaultIdentifierShift );
    if( ptr[ ISI_HEADER_SIZE + sbCountOffset ] != 0x00 )
        {
        txFcType = ( ptr[ ISI_HEADER_SIZE + SIZE_PNS_PIPE_CREATED_IND + PN_PIPE_SB_NEGOTIATED_FC_OFFSET_SBID + PN_PIPE_SB_NEGOTIATED_FC_OFFSET_NEGOTIATEDTXFC ] );
        rxFcType = ( ptr[ ISI_HEADER_SIZE + SIZE_PNS_PIPE_CREATED_IND + PN_PIPE_SB_NEGOTIATED_FC_OFFSET_SBID + PN_PIPE_SB_NEGOTIATED_FC_OFFSET_NEGOTIATEDRXFC ] );
        ASSERT_RESET_ALWAYS( aMsg.Length() > ( ISI_HEADER_SIZE + SIZE_PNS_PIPE_CREATED_IND + PN_PIPE_SB_NEGOTIATED_FC_OFFSET_SBID + PN_PIPE_SB_NEGOTIATED_FC_OFFSET_NEGOTIATEDRXFC ), EIADOverTheLimits | EIADFaultIdentifier31 << KFaultIdentifierShift );                                    
        }
    else
        {
        TRACE_ASSERT_ALWAYS;
        C_TRACE( ( _T( "DPep::HandlePnPipeSbNegotiatedFC legacy-legacy in use or corrupted" ) ) );
        OstTrace0( TRACE_PIPE, DPEP_HANDLEPNPIPESBNEGOTIATEDFC_LEGACY, "DPep::HandlePnPipeSbNegotiatedFC legacy used or corrupted" );
        }

    iPipeHandle = iMainTxRx.PipeHandle();
    ASSERT_RESET_ALWAYS( ptr[ ISI_HEADER_SIZE + PNS_PIPE_CREATED_IND_OFFSET_PIPEHANDLE ] == iPipeHandle, EIADWrongPipeHandle | EIADFaultIdentifier1 << KFaultIdentifierShift );
    // Can also be PN_NO_FLOW_CONTROL but this PEP is not ready for it.
    if( iDecoratedRx )
        {
        delete iDecoratedRx;
        iDecoratedRx = NULL;
        }
    switch( rxFcType )
        {
        case PN_LEGACY_FLOW_CONTROL:
            {
            iDecoratedRx = new DLegacyRx( iMainTxRx, iPipeHandle );
            break;
            }
        case PN_ONE_CREDIT_FLOW_CONTROL:
            {
            iDecoratedRx = new DOneRx( iMainTxRx, iPipeHandle );
            break;
            }
        case PN_MULTI_CREDIT_FLOW_CONTROL:
            {
            iDecoratedRx = new DMultiRx( iMainTxRx, iPipeHandle );
            break;
            }
        default:
            {
            ASSERT_RESET_ALWAYS(0, EIADUnknownPipeFCType | EIADFaultIdentifier1 << KFaultIdentifierShift );
            break;
            }
        }
    if( iDecoratedTx )
        {
        delete iDecoratedTx;
        iDecoratedTx = NULL;
        }
    switch( txFcType )
        {
        case PN_LEGACY_FLOW_CONTROL:
            {
            iDecoratedTx = new DLegacyTx( iMainTxRx, iPipeHandle );
            break;
            }
        case PN_ONE_CREDIT_FLOW_CONTROL:
            {
            iDecoratedTx = new DOneTx( iMainTxRx, iPipeHandle );
            break;
            }
        case PN_MULTI_CREDIT_FLOW_CONTROL:
            {
            iDecoratedTx = new DMultiTx( iMainTxRx, iPipeHandle );
            break;
            }
        default:
            {
            ASSERT_RESET_ALWAYS(0, EIADUnknownPipeFCType | EIADFaultIdentifier2 << KFaultIdentifierShift );
            break;
            }
        }
    C_TRACE( ( _T( "DPep::HandlePnPipeSbNegotiatedFC <-" ) ) );
    OstTrace0( TRACE_PIPE, DPEP_HANDLEPNPIPESBNEGOTIATEDFC_EXIT, "<DPep::HandlePnPipeSbNegotiatedFC" );

    }


void DPep::NextState(
        TPipeState aNextState
        )
    {

    OstTrace1( TRACE_PIPE, DPEP_NEXTSTATE_ENTRY, ">DPep::NextState;aNextState=%x", ( TUint )&( aNextState ) );
    C_TRACE( ( _T( "DPep::NextState 0x%x 0x%x ->" ), aNextState, this ) );
    C_TRACE( ( _T( "DPep::NextState TBR currentstate pipehandle 0x%x " ), iCurrentState->iPep.GetPipeHandle() ) );//TBR
    switch( aNextState )
        {
        case ECreating:
            {
            iCurrentState = &iCreating;
            C_TRACE( ( _T( "ECreating" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_CREATING, "DPep::NextState ECreating" );
            break;
            }
        case ECreatingEnabled:
            {
            iCurrentState = &iCreatingEnabled;
            C_TRACE( ( _T( "ECreatingEnabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_CREATINGENABLED, "DPep::NextState ECreatingEnabled" );
            break;
            }
        case EDisabled:
            {
            iCurrentState = &iDisabled;
            C_TRACE( ( _T( "EDisabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_DISABLED, "DPep::NextState EDisabled" );
            break;
            }
        case EDisabling:
            {
            iCurrentState = &iDisabling;
            C_TRACE( ( _T( "EDisabling" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_DISABLING, "DPep::NextState EDisabling" );
            break;
            }
        case EEnabled:
            {
            iCurrentState = &iEnabled;
            C_TRACE( ( _T( "EEnabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_ENABLED, "DPep::NextState EEnabled" );
            break;
            }
        case EEnabling:
            {
            iCurrentState = &iEnabling;
            C_TRACE( ( _T( "EEnabling" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_ENABLING, "DPep::NextState EEnabling" );
            break;
            }
//TBR
        case EEnableEnabled:
            {
            iCurrentState = &iEnableEnabled;
            C_TRACE( ( _T( "EEnableEnabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_ENABLEENABLED, "DPep::NextState EEnableEnabled" );
            break;
            }
//TBR
        case EDisabledDisabled:
            {
            iCurrentState = &iDisabledDisabled;
            C_TRACE( ( _T( "EDisabledDisabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_DISABLEDDISABLED, "DPep::NextState EDisabledDisabled" );
            break;
            }
        case EDisabledEnabled:
            {
            iCurrentState = &iDisabledEnabled;
            C_TRACE( ( _T( "EDisabledEnabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_DISABLEDENABLED, "DPep::NextState EDisabledEnabled" );
            break;
            }
        case EEnabledDisabled:
            {
            iCurrentState = &iEnabledDisabled;
            C_TRACE( ( _T( "EEnabledDisabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_ENABLEDDISABLED, "DPep::NextState EEnabledDisabled" );
            break;
            }
        case EEnabledEnabled:
            {
            iCurrentState = &iEnabledEnabled;
            C_TRACE( ( _T( "EEnabledEnabled" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_ENABLEDENABLED, "DPep::NextState EEnabledEnabled" );
            break;
            }
        case EDisconnected:
            {
            iCurrentState = &iDisconnected;
            C_TRACE( ( _T( "EDisconnected" ) ) );
            OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_DISCONNECTED, "DPep::NextState EDisconnected" );
            break;
            }
        default:
            {
            ASSERT_RESET_ALWAYS( 0, EIADWrongParameter | EIADFaultIdentifier20 << KFaultIdentifierShift );
            break;
            }
        }
    iCurrentState->EnterState();
    C_TRACE( ( _T( "DPep::NextState 0x%x <-" ), this ) );
    OstTrace0( TRACE_PIPE, DPEP_NEXTSTATE_EXIT, "<DPep::NextState" );

    }

// ************* DPipe methods ************* 

#if (NCP_COMMON_SOS_VERSION_SUPPORT >= SOS_VERSION_95)
void DPep::SetLoaned(
        MIAD2ChannelApi* aCh
        )
    {

    C_TRACE( ( _T( "DPep::SetLoaned 0x%x 0x%x ->" ), this, aCh ) );
    OstTraceExt2( TRACE_PIPE, DPEP__SETLOANED_ENTRY, ">DPep::SetLoaned ;this=%x;ch=0x%x", (TUint)this, (TUint) aCh );
    this->iDecoratedRx->SetNewChannel( aCh );
    this->PipeEnabled();
    C_TRACE( ( _T( "DPep::SetLoaned 0x%x 0x%x <-" ), this, aCh ) );
    OstTraceExt2( TRACE_PIPE, DPEP__SETLOANED_EXIT, "<DPep::SetLoaned ;this=%x;ch=0x%x", (TUint)this, (TUint)aCh );

    }

void DPep::SetLoanReturned(
        MIAD2ChannelApi* aOldCh
        )
    {

    C_TRACE( ( _T( "DPep::SetLoanReturned 0x%x aOldCh 0x%x ->" ), this, aOldCh ) );
    OstTraceExt2( TRACE_PIPE, DPEP__SETLOANRETURNED_ENTRY, ">DPep::SetLoaned ;this=%x;oldch=0x%x", (TUint)this, (TUint)aOldCh );
    this->iDecoratedRx->SetNewChannel( aOldCh );
    OstTraceExt2( TRACE_PIPE, DPEP__SETLOANRETURNED_EXIT, "<DPep::SetLoaned ;this=%x;oldch=0x%x", (TUint)this, (TUint)aOldCh );
    C_TRACE( ( _T( "DPep::SetLoanReturned 0x%x aOldCh 0x%x <-" ), this, aOldCh ) );

    }
#endif

// ************* Main pipe state methods **************
DPipeState::DPipeState(DPep& aPep) : iPep( aPep )
    {
    OstTrace1( TRACE_PIPE, DPIPESTATE_DPIPESTATE_ENTRY, "<>DPipeState::DPipeState;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DPipeState::DPipeState <->" ) ) );
    }

void DPipeState::NextState(TPipeState aNextState)
    {
    OstTrace1( TRACE_PIPE, DPIPESTATE_NEXTSTATE_ENTRY, "<>DPipeState::NextState;aNextState=%x", ( TUint )&( aNextState ) );
    C_TRACE( ( _T( "DPipeState::NextState ->" ) ) );
    iPep.NextState(aNextState);
    C_TRACE( ( _T( "DPipeState::NextState <-" ) ) );
    }

void DPipeState::EnterState()
    {
    OstTrace0( TRACE_PIPE, DPIPESTATE_ENTERSTATE_ENTRY, "<>DPipeState::EnterState" );
    C_TRACE( ( _T( "DPipeState::EnterState <-> nothing to do" ) ) );
    //TRACE_ASSERT_ALWAYS;
    }


TInt DPipeState::PnsPepDisconnectReq(const TDesC8& aReq)
    {

    OstTrace1( TRACE_PIPE, DPIPESTATE_PNSPEPDISCONNECTREQ_ENTRY, ">DPipeState::PnsPepDisconnectReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DPipeState::PnsPepDisconnectReq ->" ) ) );
    iPep.NextState(EDisconnected);
    TInt retVal = iPep.SendPepDisconnectResp(aReq);
    C_TRACE( ( _T( "DPipeState::PnsPepDisconnectReq 0x%x <-" ),retVal ) );
    OstTrace1( TRACE_PIPE, DPIPESTATE_PNSPEPDISCONNECTREQ_EXIT, "<DPipeState::PnsPepDisconnectReq;retVal=%d", retVal );
    return retVal;

    }

TInt DPipeState::TxPnsPipeData(
        TDes8& // aData
        )
    {

    OstTrace0( TRACE_PIPE, DPIPESTATE_TXPNSPIPEDATA_ENTRY, ">DPipeState::TxPnsPipeData" );
    C_TRACE( ( _T( "DPipeState::TxPnsPipeData <->" ) ) );
    TRACE_ASSERT_ALWAYS;
    // illegal to send in other than enabled state inform with KErrOverFlow that flowcontrol is on.
    return KErrOverflow;

    }

//********************** DCreating methods *******************/
DCreating::DCreating(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DCREATING_DCREATING_ENTRY, ">DCreating::DCreating;aPep=%x", ( TUint )&( aPep ) );

    C_TRACE( ( _T( "DCreating::DCreating <->" ) ) );

    }

TInt DCreating::PnsPepConnectReq(
        const TDesC8& aReq
        )
    {

    OstTrace1( TRACE_PIPE, DCREATING_PNSPEPCONNECTREQ_ENTRY, ">DCreating::PnsPepConnectReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DCreating::PnsPepConnectReq ->" ) ) );
    TInt retVal = iPep.SendPepConnectResp( aReq );
    ASSERT_RESET_ALWAYS( aReq.Length() > ( ISI_HEADER_SIZE + PNS_PEP_CONNECT_REQ_OFFSET_STATEAFTERCONNECT ), EIADOverTheLimits | EIADFaultIdentifier32 << KFaultIdentifierShift );                                        
    const TUint8 stateAfter( aReq.Ptr()[ ISI_HEADER_SIZE + PNS_PEP_CONNECT_REQ_OFFSET_STATEAFTERCONNECT ] );
    if( stateAfter == PN_PIPE_ENABLE )
        {
        iPep.NextState( ECreatingEnabled );
        }
    C_TRACE( ( _T( "DCreating::PnsPepConnectReq 0x%x <-" ),retVal ) );
    OstTrace1( TRACE_PIPE, DCREATING_PNSPEPCONNECTREQ_EXIT, "<DCreating::PnsPepConnectReq;retVal=%d", retVal );
    return retVal;

    }

void DCreating::PnsPipeCreatedInd(
        // None
        )
    {

    OstTrace0( TRACE_PIPE, DCREATING_PNSPIPECREATEDIND_ENTRY, ">DCreating::PnsPipeCreatedInd" );
    C_TRACE( ( _T( "DCreating::PnsPipeCreatedInd ->" ) ) );
    iPep.NextState( EDisabling );
    iPep.NextState( EDisabled );
    C_TRACE( ( _T( "DCreating::PnsPipeCreatedInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DCREATING_PNSPIPECREATEDIND_EXIT, "<DCreating::PnsPipeCreatedInd" );

    }

void DCreating::PnsPipeRedirectedInd(
        // None
        )
    {

    OstTrace0( TRACE_PIPE, DCREATING_PNSPIPEREDIRECTEDIND_ENTRY, ">DCreating::PnsPipeRedirectedInd" );
    C_TRACE( ( _T( "DCreating::PnsPipeRedirectedInd ->" ) ) );
    iPep.NextState( EDisabling );
    iPep.NextState( EDisabled );
    C_TRACE( ( _T( "DCreating::PnsPipeRedirectedInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DCREATING_PNSPIPEREDIRECTEDIND_EXIT, "<DCreating::PnsPipeRedirectedInd" );

    }

DCreatingEnabled::DCreatingEnabled(DPep& aPep) : DPipeState( aPep )
    {

    OstTrace1( TRACE_PIPE, DCREATINGENABLED_DCREATINGENABLED_ENTRY, "<>DCreatingEnabled::DCreatingEnabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DCreatingEnabled::DCreatingEnabled <->" ) ) );

    }

void DCreatingEnabled::PnsPipeCreatedInd(
        // None
        )
    {

    OstTrace0( TRACE_PIPE, DCREATINGENABLED_PNSPIPECREATEDIND_ENTRY, ">DCreatingEnabled::PnsPipeCreatedInd" );
    C_TRACE( ( _T( "DCreatingEnabled::PnsPipeCreatedInd ->" ) ) );
    iPep.NextState( EEnabled );
    C_TRACE( ( _T( "DCreatingEnabled::PnsPipeCreatedInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DCREATINGENABLED_PNSPIPECREATEDIND_EXIT, "<DCreatingEnabled::PnsPipeCreatedInd" );

    }

void DCreatingEnabled::PnsPipeRedirectedInd(
        // None
        )
    {

    OstTrace0( TRACE_PIPE, DCREATINGENABLED_PNSPIPEREDIRECTEDIND_ENTRY, ">DCreatingEnabled::PnsPipeRedirectedInd" );
    C_TRACE( ( _T( "DCreatingEnabled::PnsPipeRedirectedInd ->" ) ) );
    iPep.NextState( EEnabled );
    C_TRACE( ( _T( "DCreatingEnabled::PnsPipeRedirectedInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DCREATINGENABLED_PNSPIPEREDIRECTEDIND_EXIT, "<DCreatingEnabled::PnsPipeRedirectedInd" );

    }

//********************** DCreating methods *******************/

DDisconnected::DDisconnected(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DDISCONNECTED_DDISCONNECTED_ENTRY, "<>DDisconnected::DDisconnected;aPep=%x", ( TUint )&( aPep ) );

    C_TRACE( ( _T( "DDisconnected::DDisconnected <->" ) ) );

    }
// When Disconnected the pipe is no longer valid -> any transmission cancelled


//********************** DDisabled methods *******************/
DDisabled::DDisabled(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DDISABLED_DDISABLED_ENTRY, "<>DDisabled::DDisabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DDisabled::DDisabled <->" ) ) );
    }

void DDisabled::EnterState()
    {
    OstTrace0( TRACE_PIPE, DDISABLED_ENTERSTATE_ENTRY, ">DDisabled::EnterState" );
    C_TRACE( ( _T( "DDisabled::EnterState ->" ) ) );
    iPep.PipeDisabled();
    C_TRACE( ( _T( "DDisabled::EnterState <-" ) ) );
    OstTrace0( TRACE_PIPE, DDISABLED_ENTERSTATE_EXIT, "<DDisabled::EnterState" );
    }

TInt DDisabled::PnsPepEnableReq(const TDesC8& aReq)
    {
    OstTrace1( TRACE_PIPE, DDISABLED_PNSPEPENABLEREQ_ENTRY, ">DDisabled::PnsPepEnableReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DDisabled::PnsPepEnableReq ->" ) ) );
    iPep.NextState(EEnabling);
    C_TRACE( ( _T( "DDisabled::PnsPepEnableReq <-" ) ) );
    TInt retVal = iPep.SendPepEnableResp(aReq);
    OstTrace1( TRACE_PIPE, DDISABLED_PNSPEPENABLEREQ_EXIT, "<DDisabled::PnsPepEnableReq;retVal=%d", retVal );
    return retVal;
    }

TInt DDisabled::PnsPepDisableReq(const TDesC8& aReq)
    {
    OstTrace1( TRACE_PIPE, DDISABLED_PNSPEPDISABLEREQ_ENTRY, ">DDisabled::PnsPepDisableReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DDisabled::PnsPepDisableReq <->" ) ) );
    TInt retVal = iPep.SendPepDisableResp(aReq);
    OstTrace1( TRACE_PIPE, DDISABLED_PNSPEPDISABLEREQ_EXIT, "<DDisabled::PnsPepDisableReq;retVal=%d", retVal );
    return retVal;
    }

void DDisabled::PnsPipeDisabledInd(
        // None
        )
    {
OstTrace0( TRACE_PIPE, DDISABLED_PNSPIPEDISABLEDIND_ENTRY, ">DDisabled::PnsPipeDisabledInd" );

    C_TRACE( ( _T( "DDisabled::PnsPipeDisabledInd <->" ) ) );
    C_TRACE( ( _T( "DDisabled::PnsPipeDisabledInd disabling already disabled pipe" ) ) );

    }

//********************** DDisabling methods *******************/
DDisabling::DDisabling(
        DPep& aPep
        ) :
    DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DDISABLING_DDISABLING_ENTRY, "<>DDisabling::DDisabling;aPep=%x", ( TUint )&( aPep ) );

    C_TRACE( ( _T( "DDisabling::DDisabling <->" ) ) );

    }

void DDisabling::PnsPipeDisabledInd(
        // None
        )
    {
    OstTrace0( TRACE_PIPE, DDISABLING_PNSPIPEDISABLEDIND_ENTRY, ">DDisabling::PnsPipeDisabledInd" );

    C_TRACE( ( _T( "DDisabling::PnsPipeDisabledInd ->" ) ) );
    iPep.NextState( EDisabled );
    C_TRACE( ( _T( "DDisabling::PnsPipeDisabledInd <-" ) ) );

    OstTrace0( TRACE_PIPE, DDISABLING_PNSPIPEDISABLEDIND_EXIT, "<DDisabling::PnsPipeDisabledInd" );
    }

void DDisabling::EnterState(
        // None
        )
    {
    OstTrace0( TRACE_PIPE, DDISABLING_ENTERSTATE_ENTRY, ">DDisabling::EnterState" );

    C_TRACE( ( _T( "DDisabling::EnterState ->" ) ) );
    iPep.PipeDisabling();
    C_TRACE( ( _T( "DDisabling::EnterState <-" ) ) );

    OstTrace0( TRACE_PIPE, DDISABLING_ENTERSTATE_EXIT, "<DDisabling::EnterState" );
    }

void DDisabled::PnsPipeRedirectedInd(
        // None
        )
    {

    OstTrace0( TRACE_PIPE, DDISABLED_PNSPIPEREDIRECTEDIND_ENTRY, "<>DDisabled::PnsPipeRedirectedInd" );
    C_TRACE( ( _T( "DDisabled::PnsPipeRedirectedInd <->" ) ) );
    C_TRACE( ( _T( "DDisabled::PnsPipeRedirectedInd redirecting to disabled pipe" ) ) );

    }

TInt DDisabled::PnsPepResetReq(
        const TDesC8& aReq
        )
    {

    OstTrace1( TRACE_PIPE, DDISABLED_PNSPEPRESETREQ_ENTRY, ">DDisabled::PnsPepResetReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DDisabled::PnsPepResetReq ->" ) ) );
    ASSERT_RESET_ALWAYS( aReq.Length() > ( ISI_HEADER_SIZE + PNS_PIPE_RESET_REQ_OFFSET_PIPESTATEAFTERRESET ), EIADOverTheLimits | EIADFaultIdentifier33 << KFaultIdentifierShift );                                            
    const TUint8 stateAfter( aReq.Ptr()[ ISI_HEADER_SIZE + PNS_PIPE_RESET_REQ_OFFSET_PIPESTATEAFTERRESET ] );
    TPipeState nextState( stateAfter == PN_PIPE_DISABLE ? EDisabledDisabled : EDisabledEnabled );
    iPep.NextState( nextState );
    TInt retVal = iPep.SendPepResetResp( aReq ); // TODO: Why-iiiiiiiiiiiii retval?
    C_TRACE( ( _T( "DDisabled::PnsPepResetReq <-" ) ) );
    OstTrace1( TRACE_PIPE, DDISABLED_PNSPEPRESETREQ_EXIT, "<DDisabled::PnsPepResetReq;retVal=%d", retVal );
    return retVal;

    }

TInt DEnabled::PnsPepResetReq(
        const TDesC8& aReq
        )
    {

    OstTrace1( TRACE_PIPE, DENABLED_PNSPEPRESETREQ_ENTRY, ">DEnabled::PnsPepResetReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DEnabled::PnsPepResetReq ->" ) ) );
    ASSERT_RESET_ALWAYS( aReq.Length() > ( ISI_HEADER_SIZE + PNS_PIPE_RESET_REQ_OFFSET_PIPESTATEAFTERRESET ), EIADOverTheLimits | EIADFaultIdentifier34 << KFaultIdentifierShift );                                            
    const TUint8 stateAfter( aReq.Ptr()[ ISI_HEADER_SIZE + PNS_PIPE_RESET_REQ_OFFSET_PIPESTATEAFTERRESET ] );
    TPipeState nextState( stateAfter == PN_PIPE_DISABLE ? EEnabledDisabled : EEnabledEnabled );
    iPep.NextState( nextState );
    TInt retVal = iPep.SendPepResetResp( aReq ); // TODO: Why-iiiiiiiiiiiii retval?
    C_TRACE( ( _T( "DEnabled::PnsPepResetReq <-" ) ) );
    OstTrace1( TRACE_PIPE, DENABLED_PNSPEPRESETREQ_EXIT, "<DEnabled::PnsPepResetReq;retVal=%d", retVal );
    return retVal;

    }

//TBR
DEnableEnabled::DEnableEnabled(DPep& aPep) : DEnabled( aPep )
    {
    OstTrace1( TRACE_PIPE, DENABLEENABLED_DENABLEENABLED_ENTRY, "<>DEnableEnabled::DEnableEnabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DEnableEnabled::DEnabledEnabled <->" ) ) );
    }

void DEnableEnabled::EnterState()
    {
    OstTrace0( TRACE_PIPE, DENABLEENABLED_ENTERSTATE_ENTRY, ">DEnableEnabled::EnterState" );
    C_TRACE( ( _T( "DEnableEnabled::EnterState ->" ) ) );
    iPep.PipeEnableEnabled();
    C_TRACE( ( _T( "DEnableEnabled::EnterState <-" ) ) );
    OstTrace0( TRACE_PIPE, DENABLEENABLED_ENTERSTATE_EXIT, "<DEnableEnabled::EnterState" );
    }
//TBR

//********************** DEnabled methods *******************/
DEnabled::DEnabled(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DENABLED_DENABLED_ENTRY, "<>DEnabled::DEnabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DEnabled::DEnabled <->" ) ) );
    }

void DEnabled::EnterState()
    {
    OstTrace0( TRACE_PIPE, DENABLED_ENTERSTATE_ENTRY, ">DEnabled::EnterState" );
    C_TRACE( ( _T( "DEnabled::EnterState <->" ) ) );
    iPep.PipeEnabled();
    OstTrace0( TRACE_PIPE, DENABLED_ENTERSTATE_EXIT, "<DEnabled::EnterState" );
    }

TInt DEnabled::PnsPepDisableReq(
        const TDesC8& aReq
        )
    {

    OstTrace1( TRACE_PIPE, DENABLED_PNSPEPDISABLEREQ_ENTRY, ">DEnabled::PnsPepDisableReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DEnabled::PnsPepDisableReq ->" ) ) );
// TODO: Disabling for tx credits discarding    
    iPep.NextState( EDisabling );
    C_TRACE( ( _T( "DEnabled::PnsPepDisableReq <-" ) ) );
    TInt retVal = iPep.SendPepDisableResp( aReq );
    OstTrace1( TRACE_PIPE, DENABLED_PNSPEPDISABLEREQ_EXIT, "<DEnabled::PnsPepDisableReq;retVal=%d", retVal );
    return retVal;

    }

TInt DEnabled::PnsPepEnableReq(const TDesC8& aReq)
    {

    OstTrace1( TRACE_PIPE, DENABLED_PNSPEPENABLEREQ_ENTRY, ">DEnabled::PnsPepEnableReq;aReq=%x", ( TUint )&( aReq ) );
    C_TRACE( ( _T( "DEnabled::PnsPepEnableReq <->" ) ) );
    TInt retVal = iPep.SendPepEnableResp(aReq);
    OstTrace1( TRACE_PIPE, DENABLED_PNSPEPENABLEREQ_EXIT, "<DEnabled::PnsPepEnableReq;retVal=%d", retVal );
    return retVal;

    }

TInt DEnabled::RxPnsPipeData(const TDesC8& aData)
    {

    OstTrace1( TRACE_PIPE, DENABLED_RXPNSPIPEDATA_ENTRY, ">DEnabled::RxPnsPipeData;aData=%x", ( TUint )&( aData ) );
    C_TRACE( ( _T( "DEnabled::RxPnsPipeData <->" ) ) );
    TInt retVal = iPep.RxPipeData(aData);
    OstTrace1( TRACE_PIPE, DENABLED_RXPNSPIPEDATA_EXIT, "<DEnabled::RxPnsPipeData;retVal=%d", retVal );
    return retVal;

    }

TInt DEnabled::TxPnsPipeData(
        TDes8& aData
        )
    {

    OstTrace1( TRACE_PIPE, DENABLED_TXPNSPIPEDATA_ENTRY, ">DEnabled::TxPnsPipeData;aData=%x", ( TUint )&( aData ) );
    C_TRACE( ( _T( "DEnabled::TxPnsPipeData <->" ) ) );
    TInt retVal = iPep.TxPipeData( aData );
    OstTrace1( TRACE_PIPE, DENABLED_TXPNSPIPEDATA_EXIT, "<DEnabled::TxPnsPipeData;retVal=%d", retVal );
    return retVal;

    }

void DEnabled::PnsPipeEnabledInd()
    {

    OstTrace0( TRACE_PIPE, DENABLED_PNSPIPEENABLEDIND_ENTRY, ">DEnabled::PnsPipeEnabledInd" );
    C_TRACE( ( _T( "DEnabled::PnsPipeEnabledInd ->" ) ) );
    TRACE_ASSERT_ALWAYS;
    C_TRACE( ( _T( "DEnabled::PnsPipeEnabledInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DENABLED_PNSPIPEENABLEDIND_EXIT, "<DEnabled::PnsPipeEnabledInd" );

    }

//********************** DEnabling methods *******************/
DEnabling::DEnabling(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DENABLING_DENABLING_ENTRY, "<>DEnabling::DEnabling;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DEnabling::DEnabling <->" ) ) );
    }

void DEnabling::PnsPipeEnabledInd()
    {

    OstTrace0( TRACE_PIPE, DENABLING_PNSPIPEENABLEDIND_ENTRY, ">DEnabling::PnsPipeEnabledInd" );
    C_TRACE( ( _T( "DEnabling::PnsPipeEnabledInd ->" ) ) );
    iPep.NextState(EEnabled);
    C_TRACE( ( _T( "DEnabling::PnsPipeEnabledInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DENABLING_PNSPIPEENABLEDIND_EXIT, "<DEnabling::PnsPipeEnabledInd" );
    }
///////////////     /////////////////////////////////////////////////////
// TODO: error to pipe spec: we need this in enabling state cause in redirect no enabled_ind is coming! Create and error!!
////////////////////////////////////////////
void DEnabling::PnsPipeRedirectedInd(
        // None
        )
    {
    OstTrace0( TRACE_PIPE, DENABLING_PNSPIPEREDIRECTEDIND_ENTRY, ">DEnabling::PnsPipeRedirectedInd" );

    C_TRACE( ( _T( "DEnabling::PnsPipeRedirectedInd ->" ) ) );
    iPep.NextState( EEnabled );
    C_TRACE( ( _T( "DEnabling::PnsPipeRedirectedInd <-" ) ) );

    OstTrace0( TRACE_PIPE, DENABLING_PNSPIPEREDIRECTEDIND_EXIT, "<DEnabling::PnsPipeRedirectedInd" );
    }

///////////////     /////////////////////////////////////////////////////
// TODO: error to pipe spec: we need this in enabling state cause in redirect no enabled_ind is coming! Create and error!!
////////////////////////////////////////////


DEnabledEnabled::DEnabledEnabled(DPep& aPep) : DPipeState(aPep)
    {
    OstTrace1( TRACE_PIPE, DENABLEDENABLED_DENABLEDENABLED_ENTRY, "<>DEnabledEnabled::DEnabledEnabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DEnabledEnabled::DEnabledEnabled <->" ) ) );
    }

void DEnabledEnabled::PnsPipeResetInd() 
    {
    OstTrace0( TRACE_PIPE, DENABLEDENABLED_PNSPIPERESETIND_ENTRY, ">DEnabledEnabled::PnsPipeResetInd" );
    C_TRACE( ( _T( "DEnabledEnabled::PnsPipeResetInd ->" ) ) );
    //iPep.NextState( EEnabled );// TODO: to enabled?
    iPep.NextState( EEnableEnabled );
    C_TRACE( ( _T( "DEnabledEnabled::PnsPipeResetInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DENABLEDENABLED_PNSPIPERESETIND_EXIT, "<DEnabledEnabled::PnsPipeResetInd" );
    }

DEnabledDisabled::DEnabledDisabled(DPep& aPep) : DPipeState(aPep)
    {
    OstTrace1( TRACE_PIPE, DENABLEDDISABLED_DENABLEDDISABLED_ENTRY, "<>DEnabledDisabled::DEnabledDisabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DEnabledDisabled::DEnabledDisabled <->" ) ) );
    }

void DEnabledDisabled::EnterState()
    {
    OstTrace0( TRACE_PIPE, DENABLEDDISABLED_ENTERSTATE_ENTRY, "DEnabledDisabled::EnterState" );

    C_TRACE( ( _T( "DEnabledDisabled::EnterState ->" ) ) );
    iPep.PipeDisabling();
    C_TRACE( ( _T( "DEnabledDisabled::EnterState <-" ) ) );

    OstTrace0( TRACE_PIPE, DENABLEDDISABLED_ENTERSTATE_EXIT, "<DEnabledDisabled::EnterState" );
    }

void DEnabledDisabled::PnsPipeResetInd() 
    {
    OstTrace0( TRACE_PIPE, DENABLEDDISABLED_PNSPIPERESETIND_ENTRY, ">DEnabledDisabled::PnsPipeResetInd>" );
    C_TRACE( ( _T( "DEnabledDisabled::PnsPipeResetInd ->" ) ) );
    iPep.NextState( EDisabled );
    C_TRACE( ( _T( "DEnabledDisabled::PnsPipeResetInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DENABLEDDISABLED_PNSPIPERESETIND_EXIT, "<DEnabledDisabled::PnsPipeResetInd" );
    }

DDisabledEnabled::DDisabledEnabled(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DDISABLEDENABLED_DDISABLEDENABLED_ENTRY, "<>DDisabledEnabled::DDisabledEnabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DDisabledEnabled::DDisabledEnabled <->" ) ) );
    }
// TODO EnterState?
void DDisabledEnabled::PnsPipeResetInd() 
    {
    OstTrace0( TRACE_PIPE, DDISABLEDENABLED_PNSPIPERESETIND_ENTRY, ">DDisabledEnabled::PnsPipeResetInd>" );
    C_TRACE( ( _T( "DDisabledEnabled::PnsPipeResetInd ->" ) ) );
    iPep.NextState( EEnabled );
    C_TRACE( ( _T( "DDisabledEnabled::PnsPipeResetInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DDISABLEDENABLED_PNSPIPERESETIND_EXIT, "<DDisabledEnabled::PnsPipeResetInd" );
    }

DDisabledDisabled::DDisabledDisabled(DPep& aPep) : DPipeState( aPep )
    {
    OstTrace1( TRACE_PIPE, DDISABLEDDISABLED_DDISABLEDDISABLED_ENTRY, "<>DDisabledDisabled::DDisabledDisabled;aPep=%x", ( TUint )&( aPep ) );
    C_TRACE( ( _T( "DDisabledDisabled::DDisabledDisabled <->" ) ) );
    }

void DDisabledDisabled::PnsPipeResetInd() 
    {
    OstTrace0( TRACE_PIPE, DDISABLEDDISABLED_PNSPIPERESETIND_ENTRY, ">DDisabledDisabled::PnsPipeResetInd" );
    C_TRACE( ( _T( "DDisabledDisabled::PnsPipeResetInd ->" ) ) );
    iPep.NextState( EDisabled );
    C_TRACE( ( _T( "DDisabledDisabled::PnsPipeResetInd <-" ) ) );
    OstTrace0( TRACE_PIPE, DDISABLEDDISABLED_PNSPIPERESETIND_EXIT, "<DDisabledDisabled::PnsPipeResetInd" );
    }

//end of file