/** * packetHandler * * Handle incoming packet. Repeat if necessary * * 'packet': Pointer to the SWAP packet received */ void REPEATER::packetHandler(SWPACKET *packet) { bool repeatPacket = true; static unsigned long currentTime; if (enabled) { // Don't repeat packets addressed to our device if (packet->destAddr != panstamp.swapAddress) { // Don't repeat beyond the maximum hop count if (packet->hop < maxHopCount) { byte i; // Check received packet against the latest transactions for(i=0 ; i<REPEATER_TABLE_DEPTH ; i++) { // Same source/destination node? if (transactions[i].regAddr == packet->regAddr) { // Same SWAP function? if (transactions[i].function == packet->function) { // Same cyclic nonce? if (transactions[i].nonce == packet->nonce) { currentTime = millis(); // Time stamp not expired? if ((currentTime - transactions[i].timeStamp) < REPEATER_EXPIRATION_TIME) repeatPacket = false; //Don't repeat packet } } } } // Repeat packet? if (repeatPacket) { packet->srcAddr = panstamp.swapAddress; // Modify source address packet->hop++; // Increment hop counter delay(SWAP_TX_DELAY); // Delay before sending if (packet->send()) // Repeat packet saveTransaction(packet); // Save transaction } } } } }
TransactionProxy* PackageKitProxy::createTransaction(QString name, bool own) { TransactionProxy* transaction = new TransactionProxy(name); //qDebug() << "Transaction" << transaction->name() << "created"; //insert transcation to own list saveTransaction(transaction, own); //TODO: more signals needed! MOAR!!11111 connect(transaction,SIGNAL(package(PackageKit::Transaction::Info,QString,QString)),SLOT(t_onPackage(PackageKit::Transaction::Info,QString,QString))); connect(transaction,SIGNAL(errorCode(PackageKit::Transaction::Error,QString)),SLOT(t_onErrorCode(PackageKit::Transaction::Error,QString))); connect(transaction,SIGNAL(finished(PackageKit::Transaction::Exit,uint)),SLOT(t_onFinished(PackageKit::Transaction::Exit,quint32))); connect(transaction,SIGNAL(itemProgress(QString,PackageKit::Transaction::Status,uint)),SLOT(t_onItemProgress(QString,PackageKit::Transaction::Status,uint))); connect(transaction,SIGNAL(repoDetail(QString,QString,bool)),SLOT(t_onRepoDetail(QString,QString,bool))); connect(transaction,SIGNAL(details(QString,QString,PackageKit::Transaction::Group,QString,QString,qulonglong)),SLOT(t_onDetails(QString,QString,PackageKit::Transaction::Group,QString,QString,qulonglong))); //connect(transaction,SIGNAL(transaction)) return transaction; }