/// <summary>
        /// A sniffer entry (sniffer-mac, client-mac, rssi, and time) is added to currently built measurements.
        /// The procedures is the same for online and offline measurements - the only difference is that we do not track changes to
        /// online measurements as we are not interested in saving them persistently (at least not at the present time)
        /// </summary>
        /// <param name="snifferMac">The sniffer's mac address</param>
        /// <param name="clientMac">The client's mac adress</param>
        /// <param name="rssi">The client's rssi as measured by the sniffer</param>
        /// <param name="mode">'Offline' or 'Online' to help distinguish whether we want to save the data persistently</param>
        /// <param name="time">The time the sniffer entry was made. </param>
        private static void addToMeasurement(string snifferMac, string clientMac, int rssi, DateTime time)
        {
            Mode mode;

            //First, determine the mode.
            if (currentOfflineMeasurements.ContainsKey(clientMac))
            {
                mode = Mode.Offline;
            }
            else if (currentOnlineMeasurements.ContainsKey(clientMac))
            {
                mode = Mode.Online;
            }
            else
            {
                return; //Unknown client mac
            }
            ConcurrentDictionary <string, SnifferWifiMeasurement> dic = getMeasurementDictionary(mode);

            SnifferWifiMeasurement curWifiMeasurement = dic[clientMac];

            //Update end meas time (even more may come..)
            curWifiMeasurement.meas_time_end = time;

            //Add or update histogram with snifferMac, rssi value
            SnifferHistogram curHist = curWifiMeasurement.SnifferHistograms.FirstOrDefault(h => h.Mac == snifferMac && h.value == rssi);

            if (curHist == null) //insert new histogram
            {
                curHist       = new SnifferHistogram();
                curHist.Mac   = snifferMac;
                curHist.value = rssi;
                curHist.count = 0;
                curWifiMeasurement.SnifferHistograms.Add(curHist);
                curHist.SnifferWifiMeasurement = curWifiMeasurement;

                if (mode == Mode.Offline)
                {
                    context.AddRelatedObject(curWifiMeasurement, "SnifferHistograms", curHist);
                }
            }
            curHist.count++; //yet another count for this rssi value

            //In the offline mode we actually save the data.
            if (mode == Mode.Offline)
            {
                context.UpdateObject(curWifiMeasurement);
                context.UpdateObject(curHist);
            }
        }
示例#2
0
        //Public visibility so we can test it (directly) via unit tests
        public static SnifferWifiMeasurement getNStrongestAPMeasurement(SnifferWifiMeasurement measurement, int n)
        {
            if (measurement.getMACs().Count < n)
            {
                return(measurement);
            }

            SortedDictionary <double, String> strongestAPs = new SortedDictionary <double, String>();

            //Find the n strongest macs
            //
            foreach (String mac in measurement.getMACs())     //all APs in sample
            {
                double curMacVal = measurement.getAvgDbM(mac);
                while (strongestAPs.ContainsKey(curMacVal))
                {
                    curMacVal += 0.0001;
                }

                strongestAPs.Add(curMacVal, mac);

                //NB: TreeMap sorts members in ascending order!
                //Thus, we remove from the head to keep the strongest values
                if (strongestAPs.Count > n)
                {
                    strongestAPs.Remove(strongestAPs.First().Key);
                }
            }

            //Create new measurement containing n strongest macs
            SnifferWifiMeasurement result = new SnifferWifiMeasurement();

            foreach (double d in strongestAPs.Keys)
            {
                SnifferHistogram h = new SnifferHistogram();
                h.Mac   = strongestAPs[d];
                h.value = (int)d;
                h.count = 1;
                result.SnifferHistograms.Add(h);
                //result.addValue(strongestAPs.get(d), (int)d);
            }
            return(result);
        }
示例#3
0
 public void AddToSnifferHistograms(SnifferHistogram snifferHistogram)
 {
     base.AddObject("SnifferHistograms", snifferHistogram);
 }
示例#4
0
 public static SnifferHistogram CreateSnifferHistogram(int ID, string mac, int value, int count, int wifiMeasurement_ID)
 {
     SnifferHistogram snifferHistogram = new SnifferHistogram();
     snifferHistogram.ID = ID;
     snifferHistogram.Mac = mac;
     snifferHistogram.value = value;
     snifferHistogram.count = count;
     snifferHistogram.WifiMeasurement_ID = wifiMeasurement_ID;
     return snifferHistogram;
 }