ClRcT clXdrMarshallClAmsCompHealthcheckKeyT_4_0_0(void* pGenVar, ClBufferHandleT msg, ClUint32T isDelete)
{
    ClAmsCompHealthcheckKeyT_4_0_0* pVar = (ClAmsCompHealthcheckKeyT_4_0_0*)pGenVar;
    ClRcT rc         = CL_OK;
    ClUint32T length = 0;    

    if ((void*)0 == pVar)
    {
        clXdrMarshallClUint32T(&length, msg, 0);
    }
    else
    {
        length = 1;
        clXdrMarshallClUint32T(&length, msg, 0);

    rc = clXdrMarshallArrayClUint8T(pVar->key, 32,msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallClUint16T(&(pVar->keyLen),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    }

    return rc;
}
ClRcT
clLogBitmapPack(ClBitmapHandleT  hBitmap,
                ClBufferHandleT  msg)
{
    ClRcT                   rc        = CL_OK;
    ClUint32T  nBytes   = 0;
    ClUint8T   *pBitMap = NULL;

    CL_LOG_DEBUG_TRACE(("Enter"));

    rc = clBitmap2BufferGet(hBitmap, &nBytes, &pBitMap);
    if( CL_OK != rc )
    {
        CL_LOG_DEBUG_ERROR(("clBitmap2PositionListGet(): rc[0x %x]", rc));
        return rc;
    }    
    rc = clXdrMarshallClUint32T(&nBytes, msg, 0);
    if( CL_OK != rc )
    {
        CL_LOG_DEBUG_ERROR(("clXdrMarshallClUint32T(): rc[0x %x]", rc));
        clHeapFree(pBitMap);
        return rc;
    }
    rc = clXdrMarshallArrayClUint8T(pBitMap, nBytes, msg, 0);
    if( CL_OK != rc )
    {
        CL_LOG_DEBUG_ERROR(("clXdrMarshallArrayClUint8T(): rc[0x %x]", rc));
    }
    clHeapFree(pBitMap);
    
    CL_LOG_DEBUG_TRACE(("Exit"));
        return rc;
    }    
ClRcT _clTxnAgentAppendActiveJob(CL_IN   ClBufferHandleT  outMsg)
{
    ClRcT                   rc = CL_OK;
    ClTxnDefnT              *pTxnDefn;
    ClCntNodeHandleT        currTxnNode;
    ClCharT                 pOutMsg[1024];
    
    CL_FUNC_ENTER();
   
    rc = clCntFirstNodeGet(clTxnAgntCfg->activeTxnMap, &currTxnNode);
    
    while (rc == CL_OK)
    {
        ClCntNodeHandleT    nodeTxn;
        ClCntNodeHandleT    currJobNode;
        ClTxnAppJobDefnT    *pNewTxnJob;
        
        /* Retrieve data-node for node */
        rc = clCntNodeUserDataGet(clTxnAgntCfg->activeTxnMap, currTxnNode,
                                           (ClCntDataHandleT *)&pTxnDefn);
        if(CL_OK != rc)
        {
            clLogError("AGT", "CLI",
                    "User data get failed with error [0x%x]", rc);
            
            return rc;
        }
        
        rc = clCntFirstNodeGet(pTxnDefn->jobList, &currJobNode);
        
        while (rc == CL_OK)
        {
            ClCntNodeHandleT        nodeJob;
        
            /* Retrieve data-node for node */
            rc = clCntNodeUserDataGet(pTxnDefn->jobList, currJobNode,
                                           (ClCntDataHandleT *)&pNewTxnJob);
            pOutMsg[0] = '\0';
            sprintf(pOutMsg,
                    "   0x%x:0x%x\t|   0x%x\t|   %30s \n",
                    pTxnDefn->serverTxnId.txnMgrNodeAddress, pTxnDefn->serverTxnId.txnId,
                    pNewTxnJob->jobId.jobId, gCliTxnStatusStr[pNewTxnJob->currentState]);
 
            clXdrMarshallArrayClUint8T(&pOutMsg, strlen((char*)pOutMsg), outMsg, 0);
  
            nodeJob = currJobNode;
            rc = clCntNextNodeGet(pTxnDefn->jobList, nodeJob, &currJobNode);
        }
        
        nodeTxn = currTxnNode;
        rc = clCntNextNodeGet(clTxnAgntCfg->activeTxnMap, nodeTxn, &currTxnNode);
    }
    if(CL_GET_ERROR_CODE(rc) == CL_ERR_NOT_EXIST)
        rc = CL_OK;

    CL_FUNC_EXIT();
    return(rc);
}
ClRcT _clTxnAgentAppendServices(CL_IN   ClBufferHandleT  outMsg)
{
    ClRcT                   rc = CL_OK;
    ClTxnAgentCompServiceInfoT  *pCompInstance;
    ClCntNodeHandleT        currNode;
    ClCharT                 pOutMsg[1024];
    
    CL_FUNC_ENTER();
   
    rc = clCntFirstNodeGet(clTxnAgntCfg->compServiceMap, &currNode);
    
    while (rc == CL_OK)
    {
        ClCntNodeHandleT        node;
        /* Retrieve data-node for node */
        rc = clCntNodeUserDataGet(clTxnAgntCfg->compServiceMap, currNode,
                                       (ClCntDataHandleT *)&pCompInstance);
        if(CL_OK != rc)
        {
            clLogError("AGT", "CLI",
                    "User data get failed with error [0x%x]", rc);
            return rc;
        }

         pOutMsg[0] = '\0';

        if(pCompInstance->serviceCapability == CL_TXN_AGENT_SERVICE_2PC)
        {
            sprintf(pOutMsg,
                    "   %6d\t|   2PC Capable  \n",
                    pCompInstance->serviceType);
        }
        else if(pCompInstance->serviceCapability == CL_TXN_AGENT_SERVICE_1PC)
        {
            sprintf(pOutMsg,
                    "   %6d\t|   1PC Capable  \n",
                    pCompInstance->serviceType);
        }

        clXdrMarshallArrayClUint8T(&pOutMsg, strlen((char*)pOutMsg), outMsg, 0);
        
        node = currNode;
        rc = clCntNextNodeGet(clTxnAgntCfg->compServiceMap, node, &currNode);
    }
    if(CL_GET_ERROR_CODE(rc) == CL_ERR_NOT_EXIST)
        rc = CL_OK;
    
    CL_FUNC_EXIT();
    return(rc);
}
ClRcT clXdrMarshallClMD5T(void* pGenVar, ClBufferHandleT msg, ClUint32T isDelete)
{
    ClMD5T* pVar = (ClMD5T*)pGenVar;
    ClRcT rc;

    if ((void*)0 == pVar)
    {
        return CL_XDR_RC(CL_ERR_NULL_POINTER);
    }

    rc = clXdrMarshallArrayClUint8T(pVar->md5sum, sizeof(pVar->md5sum),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }


    return rc;
}
ClRcT clXdrMarshallClCorTxnJobHeaderT_4_0_0(void* pGenVar, ClBufferHandleT msg, ClUint32T isDelete)
{
    ClCorTxnJobHeaderT_4_0_0* pVar = (ClCorTxnJobHeaderT_4_0_0*)pGenVar;
    ClRcT rc         = CL_OK;
    ClUint32T length = 0;    

    if ((void*)0 == pVar)
    {
        clXdrMarshallClUint32T(&length, msg, 0);
    }
    else
    {
        length = 1;
        clXdrMarshallClUint32T(&length, msg, 0);

    rc = clXdrMarshallClUint8T(&(pVar->srcArch),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallClUint8T(&(pVar->regStatus),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallArrayClUint8T(pVar->reserved, 2,msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallClCorMOIdT_4_0_0(&(pVar->moId),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallClUint32T(&(pVar->numJobs),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallClInt32T(&(pVar->jobStatus),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    rc = clXdrMarshallClInt32T(&(pVar->omClassId),msg,isDelete);
    if (CL_OK != rc)
    {
        return rc;
    }

    }

    return rc;
}
/**
  This function recieves the debug CLI command through the transaction manager
  and send back the job status and registered service details. 
*/
static ClRcT 
VDECL(clTxnAgentDebugMsgReceive)(
        CL_IN   ClEoDataT               eoArg, 
        CL_IN   ClBufferHandleT  inMsg, 
        CL_IN   ClBufferHandleT  outMsg)
{
    ClRcT                   rc = CL_OK;

    CL_FUNC_ENTER();
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_NEWLINE,
                                        CL_TXN_AGT_CLI_DISP_NEWLINE_SIZE,
                                        outMsg,0);
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *) CL_TXN_AGT_CLI_DISP_JOB_LIST_HEADER,
                                        CL_TXN_AGT_CLI_DISP_JOB_LIST_HEADER_SIZE,
                                        outMsg,0);
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_SHORT_SEP,
                                        CL_TXN_AGT_CLI_DISP_SHORT_SEP_SIZE,
                                        outMsg,0);
    
    rc = _clTxnAgentAppendActiveJob(outMsg);
    if(CL_OK != rc)
    {
        clLogError("AGT", "CLI",
                "Appending active job failed with error [0x%x]. Failed to handle Txn Mgr debug cmd", rc);
        return rc;
    }
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_SHORT_SEP,
                                        CL_TXN_AGT_CLI_DISP_SHORT_SEP_SIZE,
                                        outMsg,0);
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_NEWLINE,
                                        CL_TXN_AGT_CLI_DISP_NEWLINE_SIZE,
                                        outMsg,0);
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *) CL_TXN_AGT_CLI_DISP_SRC_INFO_HEADER,
                                        CL_TXN_AGT_CLI_DISP_SRC_INFO_HEADER_SIZE,
                                        outMsg,0);
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_SHORT_SEP,
                                        CL_TXN_AGT_CLI_DISP_SHORT_SEP_SIZE,
                                        outMsg,0);

    rc = _clTxnAgentAppendServices(outMsg);
    if(CL_OK != rc)
    {
        clLogError("AGT", "CLI",
                "Appending services failed with error [0x%x]. Failed to handle Txn Mgr debug cmd", rc);
        return rc;
    }
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_SHORT_SEP,
                                        CL_TXN_AGT_CLI_DISP_SHORT_SEP_SIZE,
                                        outMsg,0);
    
    rc = clXdrMarshallArrayClUint8T((ClUint8T *)CL_TXN_AGT_CLI_DISP_NEWLINE,
                                        CL_TXN_AGT_CLI_DISP_NEWLINE_SIZE,
                                        outMsg,0);
    CL_FUNC_EXIT();
    return(rc);
}