CMessage * CMyApplication::transact ( CMessage * pSendMsg) { CConnection * pConn = m_pConnectionToReader; CMessage * pRspMsg; /* * Print the XML text for the outbound message if * verbosity is 2 or higher. */ if(1 < m_Verbose) { printf("\n===================================\n"); printf("INFO: Transact sending\n"); printXMLMessage(pSendMsg); } /* * Send the message, expect the response of certain type. * If LLRP::CConnection::transact() returns NULL then there was * an error. In that case we try to print the error details. */ pRspMsg = pConn->transact(pSendMsg, 5000); if(NULL == pRspMsg) { const CErrorDetails * pError = pConn->getTransactError(); printf("ERROR: %s transact failed, %s\n", pSendMsg->m_pType->m_pName, pError->m_pWhatStr ? pError->m_pWhatStr : "no reason given"); if(NULL != pError->m_pRefType) { printf("ERROR: ... reference type %s\n", pError->m_pRefType->m_pName); } if(NULL != pError->m_pRefField) { printf("ERROR: ... reference field %s\n", pError->m_pRefField->m_pName); } return NULL; } /* * Print the XML text for the inbound message if * verbosity is 2 or higher. */ if(1 < m_Verbose) { printf("\n- - - - - - - - - - - - - - - - - -\n"); printf("INFO: Transact received response\n"); printXMLMessage(pRspMsg); } /* * If it is an ERROR_MESSAGE (response from reader * when it can't understand the request), tattle * and declare defeat. */ if(&CERROR_MESSAGE::s_typeDescriptor == pRspMsg->m_pType) { const CTypeDescriptor * pResponseType; pResponseType = pSendMsg->m_pType->m_pResponseType; printf("ERROR: Received ERROR_MESSAGE instead of %s\n", pResponseType->m_pName); delete pRspMsg; pRspMsg = NULL; } return pRspMsg; }