package database import ( "net" "time" // log "github.com/sirupsen/logrus" "github.com/FreifunkBremen/yanic/lib/jsontime" "dev.sum7.eu/wifictld/analyzer/data" ) type Client struct { AP *AP `json:"-"` APAddr string `json:"ap"` Addr net.HardwareAddr `json:"-"` TryProbe uint16 `json:"try_probe"` TryAuth uint16 `json:"try_auth"` Connected bool `json:"connected"` Authed bool `json:"authed"` FreqHighest uint16 `json:"freq_highest"` SignalLowFreq int16 `json:"signal_low_freq"` SignalHighFreq int16 `json:"signal_high_freq"` Lastseen jsontime.Time `json:"lastseen"` } func (db *DB) LearnClient(apIP net.IP, clientWifictl *data.WifiClient) bool { ret := false // learn ap apAddr := apIP.String() ap, ok := db.APs[apAddr] if !ok { ap = &AP{} db.APs[apAddr] = ap } ap.IP = &apIP ap.Lastseen = jsontime.Now() // learn client clientAddr := clientWifictl.Addr.String() client, ok := db.Clients[clientAddr] if !ok { client = &Client{ Addr: clientWifictl.Addr, } db.Clients[clientAddr] = client } client.Lastseen = jsontime.Now() client.AP = ap client.APAddr = apAddr client.Connected = clientWifictl.Connected client.SignalLowFreq = clientWifictl.SignalLowFreq client.SignalHighFreq = clientWifictl.SignalHighFreq if clientWifictl.TryAuth > client.TryAuth { client.TryAuth = clientWifictl.TryAuth } if clientWifictl.TryProbe > client.TryProbe { client.TryProbe = clientWifictl.TryProbe } if client.FreqHighest < clientWifictl.FreqHighest { ret = (client.FreqHighest != 0) client.FreqHighest = clientWifictl.FreqHighest } if clientWifictl.Authed { client.Authed = clientWifictl.Authed } return ret } func (db *DB) GetClient(addr net.HardwareAddr) *data.WifiClient { client, ok := db.Clients[addr.String()] wClient := &data.WifiClient{ Addr: addr, Time: time.Now(), } if ok { wClient.TryProbe = client.TryProbe } return wClient }