AutoPtr<ArrayOf<Byte> > SendReq::GenerateTransactionId() { AutoPtr<ISystem> sys; CSystem::AcquireSingleton((ISystem**)&sys); Int64 mills = 0; sys->GetCurrentTimeMillis(&mills); String transactionId(String("T") + StringUtils::ToHexString(mills)); return transactionId.GetBytes(); }
// --------------------------------------------------------- // CDpMif::HandlePepCtrlReq // Handles PepCtrlReq messages // --------------------------------------------------------- // void CDpMif::HandlePepCtrlReq( TIsiReceiveC& aIsiMessage ) { OstTrace0( TRACE_NORMAL, CDPMIF_HANDLEPEPCTRLREQ, "CDpMif::HandlePepCtrlReq" ); LOGM(" CDpMif::HandlePepCtrlReq"); // Transaction id TUint8 transactionId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) ); // Pipe Handle if ( PN_PIPE_INVALID_HANDLE == iPifDcs.PipeHandle() ) { TUint8 pipeHandle( aIsiMessage.Get8bit( ISI_HEADER_SIZE + PNS_PEP_CTRL_REQ_OFFSET_PIPEHANDLE) ); iPifDcs.SetPipeHandle( pipeHandle ); } // PEP Type TUint8 pepType( aIsiMessage.Get8bit( ISI_HEADER_SIZE + PNS_PEP_CTRL_REQ_OFFSET_PEPTYPE ) ); // PEP Control ID TUint8 ctrlId( aIsiMessage.Get8bit( ISI_HEADER_SIZE + PNS_PEP_CTRL_REQ_OFFSET_PEPCTRLID ) ); // PEP Control Data TPtrC8 ctrlData; // Check if there is data (there is no data for all control id's) if ( ( ISI_HEADER_SIZE + SIZE_PNS_PEP_CTRL_REQ ) <= aIsiMessage.GetBuffer().Length() ) { // Control Data length is 1 byte TInt ctrlDataLen( 1 ); ctrlData.Set( aIsiMessage.GetData( ISI_HEADER_SIZE + PNS_PEP_CTRL_REQ_OFFSET_PEPCTRLDATA, ctrlDataLen ) ); } // Get sender device TUint8 senderDevice( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_SENDERDEVICE ) ); // Get sender object TUint8 senderObject( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_SENDEROBJECT ) ); #ifdef PIPECAMP_DATAPORT_PNS_PEP_STATUS_IND_PHONET_ADDRESS_FROM_PNS_PEP_CTRL_REQ iPifDcs.SetPipeControllerDeviceIdentifier( senderDevice ); iPifDcs.SetPipeControllerObjectIdentifier( senderObject ); #endif // E32 return value TInt return_E32( KErrNone ); // PN_PIPE return value TInt ret( KErrNone ); switch ( pepType ) { case PN_PEP_TYPE_COMM: case PN_PEP_TYPE_BT_ACC: { // comm_pep handles ctrl_req // Something can go wrong in here. Leaving is not the best case in here. // We can send an response message with error value to NOS side and // hope for the best. return_E32 = iCommPep.HandlePepCtrlReq( ctrlId, ctrlData ); break; } default: // Not supported pepType { LOG1(" ERROR - Unsupported pep type: %d", pepType ); OstTraceExt1( TRACE_NORMAL, DUP1_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: ERROR - Unsupported pep type: %hhu", pepType ); return_E32 = KErrArgument; break; } } // do mapping from E32 error codes => PN_PIPE error codes switch ( return_E32 ) { case KErrNone: { ret = PN_PIPE_NO_ERROR; break; } case KErrNotSupported: { // this error code should NOT be used according to specification LOG(" ERROR - Unsupported config (KErrNotSupported)"); OstTrace0( TRACE_NORMAL, DUP2_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: ERROR - Unsupported config (KErrNotSupported)" ); ret = PN_PIPE_ERR_NOT_SUPPORTED; break; } case KErrArgument: { // this error code should NOT be used according to specification LOG(" ERROR - Invalid argument (KErrArgument)"); OstTrace0( TRACE_NORMAL, DUP3_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: ERROR - Invalid argument (KErrArgument)" ); ret = PN_PIPE_ERR_INVALID_PARAM; break; } case KErrGeneral: { LOG(" ERROR - Invalid parameter (KErrGeneral)"); OstTrace0( TRACE_NORMAL, DUP4_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: ERROR - Invalid parameter (KErrGeneral)" ); ret = PN_PIPE_ERR_INVALID_CTRL_ID; break; } default: { // this error code should NOT be used according to specification LOG1(" ERROR - Other error: %d", return_E32 ); OstTrace1( TRACE_NORMAL, DUP5_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: ERROR - Other error: %d", return_E32 ); ret = PN_PIPE_ERR_GENERAL; break; } } // Create PNS_PEP_CTRL_RESP response TBuf8<SIZE_PNS_PEP_CTRL_RESP> messageData; // Pipe Handle messageData.Append( iPifDcs.PipeHandle() ); // PEP Control ID messageData.Append( ctrlId ); // PEP Type messageData.Append( pepType ); // Error Code messageData.Append( static_cast<TUint8>( ret ) ); // Filler bytes messageData.Append( KDpPadding ); messageData.Append( KDpPadding ); // Send message, respond to sender return_E32 = SendMessage( senderDevice, senderObject, PN_PIPE, transactionId, PNS_PEP_CTRL_RESP, messageData ); LOG1(" <== PNS_PEP_CTRL_RESP resp sent, error code = %d", ret ); OstTrace1( TRACE_NORMAL, DUP6_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: <== PNS_PEP_CTRL_RESP resp sent, error code = %d", ret ); #if defined(_DEBUG) if (KErrNone != return_E32 ) { LOG1(" Error isc api send %d", return_E32 ); OstTrace1( TRACE_NORMAL, DUP7_CDPMIF_HANDLEPEPCTRLREQ, "CDpMif:: Error isc api send %d", return_E32 ); } //no else #endif }