@@ -6,10 +6,10 @@ import (
6
6
7
7
"fmt"
8
8
"github.com/godbus/dbus"
9
- "net"
10
- "time"
11
9
"github.com/mark2b/wpa-connect/internal/log"
12
10
"github.com/mark2b/wpa-connect/internal/wpa_dbus"
11
+ "net"
12
+ "time"
13
13
)
14
14
15
15
func (self * connectManager ) Connect (ssid string , password string , timeout time.Duration ) (connectionInfo ConnectionInfo , e error ) {
@@ -44,25 +44,20 @@ func (self *connectManager) Connect(ssid string, password string, timeout time.D
44
44
}
45
45
}
46
46
if e == nil {
47
- if bss , exists := bssMap [ssid ]; exists {
48
- if bss .ReadSSID (); bss .Error == nil {
49
- if err := self .connectToBSS (& bss , iface , password ); err == nil {
50
- // Connected, save configuration
51
- cli := wpa_cli.WPACli {NetInterface : self .NetInterface }
52
- if err := cli .SaveConfig (); err == nil {
53
- connectionInfo = ConnectionInfo {NetInterface : self .NetInterface , SSID : ssid ,
54
- IP4 : self .context .ip4 , IP6 : self .context .ip6 }
55
- } else {
56
- e = err
57
- }
58
- } else {
59
- e = err
60
- }
47
+ _ , exists := bssMap [ssid ]
48
+ if err := self .connectToBSS (& wpa_dbus.BSSWPA {
49
+ SSID : ssid ,
50
+ }, iface , password , ! exists ); err == nil {
51
+ // Connected, save configuration
52
+ cli := wpa_cli.WPACli {NetInterface : self .NetInterface }
53
+ if err := cli .SaveConfig (); err == nil {
54
+ connectionInfo = ConnectionInfo {NetInterface : self .NetInterface , SSID : ssid ,
55
+ IP4 : self .context .ip4 , IP6 : self .context .ip6 }
61
56
} else {
62
- e = bss . Error
57
+ e = err
63
58
}
64
59
} else {
65
- e = errors . New ( "ssid_not_found" )
60
+ e = err
66
61
}
67
62
}
68
63
} else {
@@ -86,10 +81,18 @@ func (self *connectManager) Connect(ssid string, password string, timeout time.D
86
81
return
87
82
}
88
83
89
- func (self * connectManager ) connectToBSS (bss * wpa_dbus.BSSWPA , iface * wpa_dbus.InterfaceWPA , password string ) (e error ) {
84
+ func (self * connectManager ) connectToBSS (bss * wpa_dbus.BSSWPA , iface * wpa_dbus.InterfaceWPA , password string , isHidden bool ) (e error ) {
90
85
addNetworkArgs := map [string ]dbus.Variant {
91
86
"ssid" : dbus .MakeVariant (bss .SSID ),
92
- "psk" : dbus .MakeVariant (password )}
87
+ }
88
+ if isHidden {
89
+ addNetworkArgs ["scan_ssid" ] = dbus .MakeVariant (1 )
90
+ }
91
+ if password == "" {
92
+ addNetworkArgs ["key_mgmt" ] = dbus .MakeVariant ("NONE" )
93
+ } else {
94
+ addNetworkArgs ["psk" ] = dbus .MakeVariant (password )
95
+ }
93
96
if iface .RemoveAllNetworks ().AddNetwork (addNetworkArgs ); iface .Error == nil {
94
97
network := iface .NewNetwork
95
98
self .context .phaseWaitForInterfaceConnected = true
0 commit comments