void KdePasteProtocol::pasteFinished() { if (m_pasteReply->error()) { qWarning("%s protocol error: %s", qPrintable(protocolName()),qPrintable(m_pasteReply->errorString())); } else { // Parse id from '<result><id>143204</id><hash></hash></result>' // No useful error reports have been observed. const QString id = parseElement(m_pasteReply, QLatin1String("id")); if (id.isEmpty()) { qWarning("%s protocol error: Could not send entry.", qPrintable(protocolName())); } else { emit pasteDone(QLatin1String(hostUrlC) + id); } } m_pasteReply->deleteLater(); m_pasteReply = 0; }
void statsCallback (TMR_Reader *reader, const TMR_Reader_StatsValues* stats, void *cookie) { uint8_t i = 0; /** Each field should be validated before extracting the value */ if (TMR_READER_STATS_FLAG_CONNECTED_ANTENNAS & stats->valid) { printf("Antenna Connection Status\n"); for (i = 0; i < stats->connectedAntennas.len; i += 2) { printf("Antenna %d |%s\n", stats->connectedAntennas.list[i], stats->connectedAntennas.list[i + 1] ? "connected":"Disconnected"); } } if (TMR_READER_STATS_FLAG_NOISE_FLOOR_SEARCH_RX_TX_WITH_TX_ON & stats->valid) { printf("Noise Floor With Tx On\n"); for (i = 0; i < stats->perAntenna.len; i++) { printf("Antenna %d | %d db\n", stats->perAntenna.list[i].antenna, stats->perAntenna.list[i].noiseFloor); } } if (TMR_READER_STATS_FLAG_RF_ON_TIME & stats->valid) { printf("RF On Time\n"); for (i = 0; i < stats->perAntenna.len; i++) { printf("Antenna %d | %d ms\n", stats->perAntenna.list[i].antenna, stats->perAntenna.list[i].rfOnTime); } } if (TMR_READER_STATS_FLAG_FREQUENCY & stats->valid) { printf("Frequency %d(khz)\n", stats->frequency); } if (TMR_READER_STATS_FLAG_TEMPERATURE & stats->valid) { printf("Temperature %d(C)\n", stats->temperature); } if (TMR_READER_STATS_FLAG_PROTOCOL & stats->valid) { printf("Protocol %s\n", protocolName(stats->protocol)); } if (TMR_READER_STATS_FLAG_ANTENNA_PORTS & stats->valid) { printf("currentAntenna %d\n", stats->antenna); } }
int main(int argc, char *argv[]) { #ifndef TMR_ENABLE_BACKGROUND_READS errx(1, "This sample requires background read functionality.\n" "Please enable TMR_ENABLE_BACKGROUND_READS in tm_config.h\n" "to run this codelet\n"); return -1; #else TMR_Reader r, *rp; TMR_Status ret; TMR_Region region; #if USE_TRANSPORT_LISTENER TMR_TransportListenerBlock tb; #endif TMR_ReadListenerBlock rlb; TMR_ReadExceptionListenerBlock reb; TMR_StatsListenerBlock slb; if (argc < 2) { errx(1, "Please provide reader URL, such as:\n" "tmr:///com4\n" "tmr://my-reader.example.com\n"); } rp = &r; ret = TMR_create(rp, argv[1]); checkerr(rp, ret, 1, "creating reader"); #if USE_TRANSPORT_LISTENER if (TMR_READER_TYPE_SERIAL == rp->readerType) { tb.listener = serialPrinter; } else { tb.listener = stringPrinter; } tb.cookie = stdout; TMR_addTransportListener(rp, &tb); #endif ret = TMR_connect(rp); checkerr(rp, ret, 1, "connecting reader"); region = TMR_REGION_NONE; ret = TMR_paramGet(rp, TMR_PARAM_REGION_ID, ®ion); checkerr(rp, ret, 1, "getting region"); if (TMR_REGION_NONE == region) { TMR_RegionList regions; TMR_Region _regionStore[32]; regions.list = _regionStore; regions.max = sizeof(_regionStore)/sizeof(_regionStore[0]); regions.len = 0; ret = TMR_paramGet(rp, TMR_PARAM_REGION_SUPPORTEDREGIONS, ®ions); checkerr(rp, ret, __LINE__, "getting supported regions"); if (regions.len < 1) { checkerr(rp, TMR_ERROR_INVALID_REGION, __LINE__, "Reader doesn't supportany regions"); } region = regions.list[0]; ret = TMR_paramSet(rp, TMR_PARAM_REGION_ID, ®ion); checkerr(rp, ret, 1, "setting region"); } { /* Code to get the reader stats after the sync read */ TMR_Reader_StatsValues stats; TMR_Reader_StatsFlag setFlag; TMR_PortValueList value; TMR_PortValue valueList[64]; int i, j; printf("\nReader stats after the sync read\n"); /** request for the statics fields of your interest, before search */ setFlag = TMR_READER_STATS_FLAG_ALL; value.max = sizeof(valueList)/sizeof(valueList[0]); value.list = valueList; ret = TMR_paramSet(rp, TMR_PARAM_READER_STATS_ENABLE, &setFlag); checkerr(rp, ret, 1, "setting the fields"); for (j = 1; j < 4; j++) { /** * perform three iterations to see that reader stats are * resetting after each search operation. **/ printf("\nIteration:%d\n", j); /** * performing the search operation. for 1 sec, * Individual search will reset the reader stats, before doing the search */ printf("Performing the search operation. for 1 sec\n"); ret = TMR_read(rp, 1000, NULL); checkerr(rp, ret, 1, "reading tags"); /** Initialize the reader statics variable to default values */ TMR_STATS_init(&stats); /* Search is completed. Get the reader stats */ printf("Search is completed. Get the reader stats\n"); ret = TMR_paramGet(rp, TMR_PARAM_READER_STATS, &stats); checkerr(rp, ret, 1, "getting the reader statistics"); /** Each field should be validated before extracting the value */ if (TMR_READER_STATS_FLAG_CONNECTED_ANTENNAS & stats.valid) { printf("Antenna Connection Status\n"); for (i = 0; i < stats.connectedAntennas.len; i += 2) { printf("Antenna %d |%s\n", stats.connectedAntennas.list[i], stats.connectedAntennas.list[i + 1] ? "connected":"Disconnected"); } } /* Get the antenna return loss value, this parameter is not the part of reader stats */ ret = TMR_paramGet(rp, TMR_PARAM_ANTENNA_RETURNLOSS, &value); checkerr(rp, ret, 1, "getting the antenna return loss"); printf("Antenna Return Loss\n"); for (i = 0; i < value.len && i < value.max; i++) { printf("Antenna %d | %d \n", value.list[i].port, value.list[i].value); } if (TMR_READER_STATS_FLAG_NOISE_FLOOR_SEARCH_RX_TX_WITH_TX_ON & stats.valid) { printf("Noise Floor With Tx On\n"); for (i = 0; i < stats.perAntenna.len; i++) { printf("Antenna %d | %d db\n", stats.perAntenna.list[i].antenna, stats.perAntenna.list[i].noiseFloor); } } if (TMR_READER_STATS_FLAG_RF_ON_TIME & stats.valid) { printf("RF On Time\n"); for (i = 0; i < stats.perAntenna.len; i++) { printf("Antenna %d | %d ms\n", stats.perAntenna.list[i].antenna, stats.perAntenna.list[i].rfOnTime); } } if (TMR_READER_STATS_FLAG_FREQUENCY & stats.valid) { printf("Frequency %d(khz)\n", stats.frequency); } if (TMR_READER_STATS_FLAG_TEMPERATURE & stats.valid) { printf("Temperature %d(C)\n", stats.temperature); } if (TMR_READER_STATS_FLAG_PROTOCOL & stats.valid) { printf("Protocol %s\n", protocolName(stats.protocol)); } if (TMR_READER_STATS_FLAG_ANTENNA_PORTS & stats.valid) { printf("currentAntenna %d\n", stats.antenna); } } } { /* Code to get the reader stats after the async read */ TMR_Reader_StatsFlag setFlag = TMR_READER_STATS_FLAG_ALL; rlb.listener = callback; rlb.cookie = NULL; reb.listener = exceptionCallback; reb.cookie = NULL; slb.listener = statsCallback; slb.cookie = NULL; ret = TMR_addReadListener(rp, &rlb); checkerr(rp, ret, 1, "adding read listener"); ret = TMR_addReadExceptionListener(rp, &reb); checkerr(rp, ret, 1, "adding exception listener"); ret = TMR_addStatsListener(rp, &slb); checkerr(rp, ret, 1, "adding the stats listener"); printf("\nReader stats after the async read \n"); /** request for the statics fields of your interest, before search */ ret = TMR_paramSet(rp, TMR_PARAM_READER_STATS_ENABLE, &setFlag); checkerr(rp, ret, 1, "setting the fields"); printf("Initiating the search operation. for 1 sec and the listener will provide the reader stats\n"); ret = TMR_startReading(rp); checkerr(rp, ret, 1, "starting reading"); #ifndef WIN32 sleep(1); #else Sleep(1000); #endif ret = TMR_stopReading(rp); checkerr(rp, ret, 1, "stopping reading"); } TMR_destroy(rp); return 0; #endif /* TMR_ENABLE_BACKGROUND_READS */ }
std::list<CProtocols*>* WINAPI CNdiskd::GetProtocolList(std::list<CProtocols*> *protocolList) { ULONG cbBytesReturned; ULONG64 Address; // Start parsing ndisProtocolList Address = GetExpression("ndis!ndisProtocolList"); if (Address) { // Obtain the first protocol from the list cbBytesReturned = 0; Address = utils::getPointerFromAddress(Address, &cbBytesReturned); if (cbBytesReturned > 0) { DbgPrint("DEBUG: %s:%d:%s Ptr to first protocol (NDIS_PROTOCOL_BLOCK) in the list: %p\n", __FILE__, __LINE__, __FUNCTION__, Address); ExtRemoteTyped ndisProtocolList("(ndis!_NDIS_PROTOCOL_BLOCK*)@$extin", Address); // Enumerating all protocols, starting from first protocol do{ CProtocols *protocol = new CProtocols(); ULONG64 addrName = utils::getNdisFieldData(Address, ndisProtocolList, "Name"); ULONG64 addrNextProtocol = utils::getNdisFieldData(Address, ndisProtocolList, "NextProtocol"); // Set protocol's information ExtRemoteTyped protocolName("(nt!_UNICODE_STRING*)@$extin", addrName); // Get current protocol name's heap PWSTR Name = protocol->GetProtocolName(); // Save protocol name utils::getUnicodeString(protocolName, Name, MAX_PROTOCOL_NAME*sizeof(WCHAR)); protocol->SetProtocolName(Name); // Save protocol version protocol->m_majorversion = (UCHAR)utils::getNdisFieldData(0, ndisProtocolList, "MajorNdisVersion"); protocol->m_minorversion = (UCHAR)utils::getNdisFieldData(0, ndisProtocolList, "MinorNdisVersion"); // Save handler functions protocol->m_ptrReceiveHandler = utils::getNdisFieldData(0, ndisProtocolList, "ReceiveHandler"); protocol->m_ptrReceivePacketHandler = utils::getNdisFieldData(0, ndisProtocolList, "ReceivePacketHandler"); protocol->m_ptrReceiveCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "ReceiveCompleteHandler"); protocol->m_ptrWanReceiveHandler = utils::getNdisFieldData(0, ndisProtocolList, "WanReceiveHandler"); protocol->m_ptrResetCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "ResetCompleteHandler"); protocol->m_ptrWanTransferDataCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "WanTransferDataCompleteHandler"); protocol->m_ptrTransferDataCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "TransferDataCompleteHandler"); protocol->m_ptrWanSendCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "WanSendCompleteHandler"); protocol->m_ptrSendCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "SendCompleteHandler"); protocol->m_ptrCloseAdapterCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "CloseAdapterCompleteHandler"); protocol->m_ptrOpenAdapterCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "OpenAdapterCompleteHandler"); protocol->m_ptrStatusCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "StatusCompleteHandler"); protocol->m_ptrStatusHandler = utils::getNdisFieldData(0, ndisProtocolList, "StatusHandler"); protocol->m_ptrRequestCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "RequestCompleteHandler"); if (utils::IsVistaOrAbove()) { protocol->m_ptrSendNetBufferListsCompleteHandler = utils::getNdisFieldData(0, ndisProtocolList, "SendNetBufferListsCompleteHandler"); protocol->m_ptrReceiveNetBufferListsHandler = utils::getNdisFieldData(0, ndisProtocolList, "ReceiveNetBufferListsHandler"); protocol->m_ptrStatusHandlerEx = utils::getNdisFieldData(0, ndisProtocolList, "StatusHandlerEx"); } // Save protocol start and end address // Pick a handler that most likely will not be hooked ULONG64 Base; ULONG64 addrHandler = utils::getNdisFieldData(0, ndisProtocolList, "PnPEventHandler"); // Sanity check if (addrHandler != NULL) { protocol->m_protocolStartAddr = Base = utils::findModuleBase(addrHandler); protocol->m_protocolEndAddr = Base + utils::getModuleSize(Base); } // Get the module name for the protocol's handler CHAR moduleName[MAX_MODULE_NAME] = { 0 }; utils::getNameByOffset(addrHandler, moduleName); StringCchCopyA(protocol->m_ModuleName, MAX_MODULE_NAME, moduleName); // For debugging purposes DbgPrint("DEBUG: %s:%d:%s Protocol address: %p (%I64x-%I64x [%s]), Protocol name: %msu (v%d.%d)\n", __FILE__, __LINE__, __FUNCTION__, Address, protocol->m_protocolStartAddr, protocol->m_protocolEndAddr, protocol->m_ModuleName, addrName, protocol->m_majorversion, protocol->m_minorversion); // Done setting protocol's information, save protocol ptr to vector protocolList->push_back(protocol); // Next protocol Address = utils::getPointerFromAddress(addrNextProtocol, &cbBytesReturned); ndisProtocolList = ndisProtocolList.Field("NextProtocol"); } while (Address != NULL); } } else { g_Ext->m_Control->Output(DEBUG_OUTPUT_ERROR, __FUNCTION__ ": Unable to find expression ndisProtocolList\n"); } return protocolList; }// GetProtocolList