Example #1
0
/**
 * 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;
}