mirror of
https://github.com/taigrr/golang-wpasupplicant
synced 2025-01-18 04:43:18 -08:00
Initial version of STATUS command
At the moment only returning a subset of the values you can get. That will come later.
This commit is contained in:
parent
763b1685df
commit
676121199d
44
unixgram.go
44
unixgram.go
@ -330,6 +330,15 @@ func (uc *unixgramConn) ScanResults() ([]ScanResult, []error) {
|
|||||||
return parseScanResults(bytes.NewBuffer(resp))
|
return parseScanResults(bytes.NewBuffer(resp))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (uc *unixgramConn) Status() (StatusResult, error) {
|
||||||
|
resp, err := uc.cmd("STATUS")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return parseStatusResults(bytes.NewBuffer(resp))
|
||||||
|
}
|
||||||
|
|
||||||
func (uc *unixgramConn) ListNetworks() ([]ConfiguredNetwork, error) {
|
func (uc *unixgramConn) ListNetworks() ([]ConfiguredNetwork, error) {
|
||||||
resp, err := uc.cmd("LIST_NETWORKS")
|
resp, err := uc.cmd("LIST_NETWORKS")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -360,10 +369,7 @@ func parseListNetworksResult(resp io.Reader) (res []ConfiguredNetwork, err error
|
|||||||
return nil, &ParseError{}
|
return nil, &ParseError{}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("Listing networks")
|
|
||||||
|
|
||||||
networkIDCol, ssidCol, bssidCol, flagsCol, maxCol := -1, -1, -1, -1, -1
|
networkIDCol, ssidCol, bssidCol, flagsCol, maxCol := -1, -1, -1, -1, -1
|
||||||
fmt.Println(strings.Split(s.Text(), " / "))
|
|
||||||
for n, col := range strings.Split(s.Text(), " / ") {
|
for n, col := range strings.Split(s.Text(), " / ") {
|
||||||
switch col {
|
switch col {
|
||||||
case "network id":
|
case "network id":
|
||||||
@ -379,12 +385,9 @@ func parseListNetworksResult(resp io.Reader) (res []ConfiguredNetwork, err error
|
|||||||
maxCol = n
|
maxCol = n
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(networkIDCol)
|
|
||||||
|
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
ln := s.Text()
|
ln := s.Text()
|
||||||
fields := strings.Split(ln, "\t")
|
fields := strings.Split(ln, "\t")
|
||||||
fmt.Println(fields)
|
|
||||||
if len(fields) < maxCol {
|
if len(fields) < maxCol {
|
||||||
return nil, &ParseError{Line: ln}
|
return nil, &ParseError{Line: ln}
|
||||||
}
|
}
|
||||||
@ -417,8 +420,35 @@ func parseListNetworksResult(resp io.Reader) (res []ConfiguredNetwork, err error
|
|||||||
bssid: bssid,
|
bssid: bssid,
|
||||||
flags: flags,
|
flags: flags,
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// fmt.Println(res)
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseStatusResults(resp io.Reader) (StatusResult, error) {
|
||||||
|
s := bufio.NewScanner(resp)
|
||||||
|
|
||||||
|
res := &statusResult{}
|
||||||
|
|
||||||
|
for s.Scan() {
|
||||||
|
ln := s.Text()
|
||||||
|
fields := strings.Split(ln, "=")
|
||||||
|
if len(fields) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
switch fields[0] {
|
||||||
|
case "wpa_state":
|
||||||
|
res.wpaState = fields[1]
|
||||||
|
case "key_mgmt":
|
||||||
|
res.keyMgmt = fields[1]
|
||||||
|
case "ip_address":
|
||||||
|
res.ipAddr = fields[1]
|
||||||
|
case "ssid":
|
||||||
|
res.ssid = fields[1]
|
||||||
|
case "address":
|
||||||
|
res.address = fields[1]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
|
@ -131,3 +131,37 @@ func TestParseScanResults(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseStatusResults(t *testing.T) {
|
||||||
|
testData := "bssid=02:00:01:02:03:04\n" +
|
||||||
|
"ssid=test network\n" +
|
||||||
|
"pairwise_cipher=CCMP\n" +
|
||||||
|
"group_cipher=CCMP\n" +
|
||||||
|
"key_mgmt=WPA-PSK\n" +
|
||||||
|
"wpa_state=COMPLETED\n" +
|
||||||
|
"ip_address=192.168.1.21\n" +
|
||||||
|
"Supplicant PAE state=AUTHENTICATED\n" +
|
||||||
|
"suppPortStatus=Authorized\n" +
|
||||||
|
"EAP state=SUCCESS"
|
||||||
|
|
||||||
|
res, err := parseStatusResults(bytes.NewBufferString(testData))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Error parsing status result %t", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.WPAState() != "COMPLETED" {
|
||||||
|
t.Errorf("WPAState was not COMPLETED. Was %s", res.WPAState())
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.IPAddr() != "192.168.1.21" {
|
||||||
|
t.Errorf("IPAddr was not 192.168.1.21. Was %s", res.IPAddr())
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.KeyMgmt() != "WPA-PSK" {
|
||||||
|
t.Errorf("KeyMgmt was not WPA-PSK. Was %s", res.KeyMgmt())
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.Address() != "" {
|
||||||
|
t.Errorf("Address should be empty. Was %s", res.Address())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -140,6 +140,28 @@ func (r *configuredNetwork) BSSID() string { return r.bssid }
|
|||||||
func (r *configuredNetwork) SSID() string { return r.ssid }
|
func (r *configuredNetwork) SSID() string { return r.ssid }
|
||||||
func (r *configuredNetwork) Flags() []string { return r.flags }
|
func (r *configuredNetwork) Flags() []string { return r.flags }
|
||||||
|
|
||||||
|
type StatusResult interface {
|
||||||
|
WPAState() string
|
||||||
|
KeyMgmt() string
|
||||||
|
IPAddr() string
|
||||||
|
SSID() string
|
||||||
|
Address() string
|
||||||
|
}
|
||||||
|
|
||||||
|
type statusResult struct {
|
||||||
|
wpaState string
|
||||||
|
keyMgmt string
|
||||||
|
ipAddr string
|
||||||
|
ssid string
|
||||||
|
address string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *statusResult) WPAState() string { return s.wpaState }
|
||||||
|
func (s *statusResult) KeyMgmt() string { return s.keyMgmt }
|
||||||
|
func (s *statusResult) IPAddr() string { return s.ipAddr }
|
||||||
|
func (s *statusResult) SSID() string { return s.ssid }
|
||||||
|
func (s *statusResult) Address() string { return s.address }
|
||||||
|
|
||||||
type WPAEvent struct {
|
type WPAEvent struct {
|
||||||
Event string
|
Event string
|
||||||
Arguments map[string]string
|
Arguments map[string]string
|
||||||
@ -200,6 +222,9 @@ type Conn interface {
|
|||||||
// ListNetworks returns the currently configured networks.
|
// ListNetworks returns the currently configured networks.
|
||||||
ListNetworks() ([]ConfiguredNetwork, error)
|
ListNetworks() ([]ConfiguredNetwork, error)
|
||||||
|
|
||||||
|
// Status returns current wpa_supplicant status
|
||||||
|
Status() (StatusResult, error)
|
||||||
|
|
||||||
// Scan triggers a new scan. Returns error if the wpa_supplicant does not
|
// Scan triggers a new scan. Returns error if the wpa_supplicant does not
|
||||||
// return OK.
|
// return OK.
|
||||||
Scan() error
|
Scan() error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user