Example #1
0
int BadMacTest(const struct TConfig* config) {
    if (InitWriter(config->MainConfig.Device))
        return 1;
    int packetsPerTest = config->MainConfig.PacketsPerTest;
    double start = config->BadMacConfig.Start;
    double step = config->BadMacConfig.Step;
    int tests = config->BadMacConfig.TestsCount;
    int testNum;
    uint32_t packetNum = 0;
    struct TUDPPacket packet;
    InitUDPPacket(&packet, &config->MainConfig);
    uint8_t payload[18];
    memset(payload, 'x', sizeof(payload));
    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 0;
    fprintf(stderr, "Bad MAC test\n%4s %8s %15s\n", ColumnTest, ColumnSended, ColumnBadPackets);
    for (testNum = 0; testNum < tests; ++testNum) {
        double frenq = start + testNum*step;
        if (frenq < 0)
            frenq = 0;
        if (frenq > 1)
            frenq = 1;
        int badPackets = 0;
        int i;
        for (i = 0; i < packetsPerTest; ++i) {
            WritePacketNum(payload, packetNum);
            SetData(&packet, payload, sizeof(payload));
            if (i != 0 && i != packetsPerTest - 1 && badPackets < i*frenq) {
                SetMac(&packet, config->MainConfig.SourceMac, config->BadMacConfig.FakeDestMac);
                ++badPackets;
            } else {
                SetMac(&packet, config->MainConfig.SourceMac, config->MainConfig.DestMac);
            }
            if (SendPacket(&packet, &tv, config->MainConfig.Delay))
                return 1;
            packetNum++;
        }
        fprintf(stderr, "%4d %8d %15.2lf\n", testNum, packetsPerTest, frenq*100);
    }
    FinishWriter();
    return 0;
}
nsresult
nsWifiScannerDBus::IdentifyAPProperties(DBusMessage* aMsg)
{
  DBusMessageIter arr;
  nsresult rv = GetDBusIterator(aMsg, &arr);
  NS_ENSURE_SUCCESS(rv, rv);

  RefPtr<nsWifiAccessPoint> ap = new nsWifiAccessPoint();
  do {
    DBusMessageIter dict;
    dbus_message_iter_recurse(&arr, &dict);

    do {
      const char* key;
      dbus_message_iter_get_basic(&dict, &key);
      if (!key) {
        return NS_ERROR_FAILURE;
      }
      dbus_message_iter_next(&dict);

      DBusMessageIter variant;
      dbus_message_iter_recurse(&dict, &variant);

      if (!strncmp(key, "Ssid", strlen("Ssid"))) {
        nsresult rv = StoreSsid(&variant, ap);
        NS_ENSURE_SUCCESS(rv, rv);
        break;
      }

      if (!strncmp(key, "HwAddress", strlen("HwAddress"))) {
        nsresult rv = SetMac(&variant, ap);
        NS_ENSURE_SUCCESS(rv, rv);
        break;
      }

      if (!strncmp(key, "Strength", strlen("Strength"))) {
        if (dbus_message_iter_get_arg_type(&variant) != DBUS_TYPE_BYTE) {
          return NS_ERROR_FAILURE;
        }

        uint8_t strength;
        dbus_message_iter_get_basic(&variant, &strength);
        ap->setSignal(strength);
      }
    } while (dbus_message_iter_next(&dict));
  } while (dbus_message_iter_next(&arr));

  mAccessPoints->AppendObject(ap);
  return NS_OK;
}