[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master d9cbdb9 39/76: Added some section headers.
From: |
Ian Dunn |
Subject: |
[elpa] master d9cbdb9 39/76: Added some section headers. |
Date: |
Thu, 23 Feb 2017 19:42:50 -0500 (EST) |
branch: master
commit d9cbdb91db59321a902f4d2d4caa47ce82b5b280
Author: Ian D <address@hidden>
Commit: Ian D <address@hidden>
Added some section headers.
(enwc-nm-dbus-settings-groups): Added new variable.
(enwc-nm--ap-to-conn, enwc-nm-connection-p): Added new function.
(enwc-nm-get-wireless-nw-props): Fixed typo in HwAddress.
(enwc-nm--recurse-dbus-entry): Added to help with
`enwc-nm-set-dbus-dict-entry'.
(enwc-nm-set-dbus-dict-entry): Uses `enwc-nm--recurse-dbus-entry'.
(enwc-nm-process-profile-info): Began fixing.
(enwc-nm-get-profile-info): Added new function.
(enwc-nm-finalize-settings): Added doc-string.
(enwc-nm-setup-settings): Implemented new functions.
---
lisp/enwc-nm.el | 181 ++++++++++++++++++++++++++++++++++++++---------------
lisp/enwc-setup.el | 4 +-
lisp/enwc.el | 11 +++-
3 files changed, 142 insertions(+), 54 deletions(-)
diff --git a/lisp/enwc-nm.el b/lisp/enwc-nm.el
index ed4c625..b6499ce 100644
--- a/lisp/enwc-nm.el
+++ b/lisp/enwc-nm.el
@@ -91,6 +91,26 @@
:group 'enwc-nm
:type 'string)
+;;TODO: Make this customizable.
+(defconst enwc-nm-dbus-settings-groups
+ '(("802-11-wireless-security" . ("name"
+ "key-mgmt"
+ "wep-tx-keyidx"
+ "auth-alg"
+ "proto"
+ "pairwise"
+ "group"
+ "leap-username"
+ "wep-key0"
+ "wep-key1"
+ "wep-key2"
+ "wep-key3"
+ "wep-key-type"
+ "psk"
+ "leap-password"))
+ ("ipv4" . ("addresses"
+ "dns"))))
+
(defvar enwc-nm-wired-dev nil
"The wired device object path.")
@@ -174,6 +194,31 @@
(defun enwc-nm-get-device-by-name (name)
(enwc-nm-dbus-default-call-method "GetDeviceByIpIface" :string name))
+(defun enwc-nm--ap-to-conn (ap)
+ "Get the connection that corresponds to AP."
+ (let ((ssid (dbus-byte-array-to-string (enwc-nm-get-wireless-network-property
+ ap "Ssid")))
+ (conns (enwc-nm-list-connections))
+ conn)
+ (while (and conns (not conn))
+ (setq conn (pop conns))
+ (let ((settings (enwc-nm-get-settings conn)))
+ (if settings
+ (let ((this-ssid (enwc-nm-get-dbus-dict-entry
"802-11-wireless/ssid"
+ settings)))
+ (unless (and this-ssid
+ (string-equal (dbus-byte-array-to-string this-ssid)
+ ssid))
+ (setq conn nil)))
+ (setq conn nil))))
+ conn))
+
+(defun enwc-nm-connection-p (conn)
+ "Return non-nil if CONN is a connection object."
+ (and conn
+ (stringp conn)
+ (string-match "^/org/freedesktop/NetworkManager/Settings/[0-9]+$"
conn)))
+
;;;;;;;;;;;;;;;;;;
;; Get networks ;;
;;;;;;;;;;;;;;;;;;
@@ -286,7 +331,7 @@ PROP from that access point. It also sets the channel from
the
enwc-nm-dbus-accesspoint-interface)))
`((essid . ,(dbus-byte-array-to-string (cdr (assoc "Ssid" props))))
- (bssid . ,(cdr (assoc "HwAddres" props)))
+ (bssid . ,(cdr (assoc "HwAddress" props)))
(strength . ,(cdr (assoc "Strength" props)))
(encrypt . ,(or (enwc-nm-get-encryption-type nw) "Unsecured"))
(channel . ,(number-to-string (enwc-nm--freq-to-channel
@@ -342,6 +387,10 @@ If STATE is 40, then NetworkManager is connecting to a new
AP."
(defun enwc-nm-is-wired ()
enwc-nm-wired-p)
+;;;;;;;;;;;;;;;;;;;;;;
+;; Profile Handling ;;
+;;;;;;;;;;;;;;;;;;;;;;
+
(defun enwc-nm-gen-uuid ()
"Generate a UUID."
(random t)
@@ -398,6 +447,10 @@ PREFIX is an integer <= 32."
(enwc--htonl (lsh (1- (expt 2 prefix)) (- 32 prefix))))
0))
+;;;;;;;;;;;;;;;;;;;;;;
+;; D-Bus Conversion ;;
+;;;;;;;;;;;;;;;;;;;;;;
+
(defun enwc-nm-get-dbus-dict-entry (entry dict)
"Get an entry ENTRY from D-Bus dictionary DICT.
@@ -415,38 +468,24 @@ representing another layer in the dictionary."
(setq cur-ent (cadr cur-ent))))
cur-ent))
+(defun enwc-nm--recurse-dbus-entry (dict value entries)
+ "Look in DICT for ENTRIES, and set the final one to VALUE."
+ (if (not entries)
+ (setcar dict value)
+ (let* ((cur-str (car entries))
+ (cur-ent (assoc cur-str dict)))
+ (unless cur-ent
+ (if (equal dict '(nil))
+ (setcar dict `(,cur-str (nil)))
+ (nconc dict `((,cur-str (nil)))))
+ (setq cur-ent (assoc cur-str dict)))
+ (enwc-nm--recurse-dbus-entry (cadr cur-ent) value (cdr entries)))))
+
(defun enwc-nm-set-dbus-dict-entry (entry dict value)
"Set entry ENTRY in D-Bus dictionary DICT to VALUE."
(cl-check-type entry string)
(cl-check-type dict list)
- (let ((ent-strs (split-string entry "/"))
- (cur-ent dict)
- cur-str)
- (while ent-strs
- (setq cur-str (pop ent-strs))
- (setq cur-ent (assoc cur-str cur-ent))
- (when (and cur-ent ent-strs)
- (setq cur-ent (cadr cur-ent))))
- (when cur-ent
- (setcdr cur-ent `(,value)))))
-
-(defun enwc-nm-get-profile-info (id &optional wired)
- (let ((settings (enwc-nm-get-settings id)))
- (when settings
- (let* ((adr-info (caar (enwc-nm-get-dbus-dict-entry "ipv4/addresses"
settings)))
- (ip-addr (enwc-nm-convert-addr (nth 0 adr-info)))
- (netmask (enwc-nm-convert-addr (enwc-nm-prefix-to-netmask (nth 1
adr-info))))
- (gateway (enwc-nm-convert-addr (nth 2 adr-info)))
- (dns-list (mapcar 'enwc-nm-convert-addr
- (car (enwc-nm-get-dbus-dict-entry "ipv4/dns"
- settings))))
- (sec-info (enwc-nm-get-sec-info settings)))
- `((addr . ,ip-addr)
- (netmask . ,netmask)
- (gateway . ,gateway)
- (dns1 . ,(nth 0 dns-list))
- (dns2 . ,(nth 1 dns-list))
- ,@sec-info)))))
+ (enwc-nm--recurse-dbus-entry dict value (split-string entry "/")))
(defun enwc-nm-convert-dict-list (dict-ent settings)
"Convert a D-Bus dictionary entry DICT-ENT from SETTINGS to an alist."
@@ -482,16 +521,14 @@ representing another layer in the dictionary."
;; Find the corresponding entry in settings, and set it to the new value.
;; Check 802-11-wireless-security, then 802-1x, then ipv4.
(let ((ent-list '("802-11-wireless-security"
- "802-1x"
"ipv4"))
cur-ent)
(while ent-list
(setq cur-ent (pop ent-list))
- (when
- (enwc-nm-set-dbus-dict-entry (concat ent-list "/"
- (symbol-name (car ent)))
- settings
- (cdr ent))
+ (when (enwc-nm-set-dbus-dict-entry (concat cur-ent "/"
+ (symbol-name (car ent)))
+ settings
+ (cdr ent))
(setq ent-list nil))))))
(defun enwc-nm-alist-to-dbus-str-str-var-map-map (alist)
@@ -500,32 +537,76 @@ representing another layer in the dictionary."
(push `(:string (car ent) ,(enwc-nm-alist-to-dbus-dict (cadr ent))) ret)
(push :dict-entry ret))))
+(defun enwc-nm-get-profile-info (ap &optional wired)
+ "Get the profile info for access point AP."
+ (let ((conn (enwc-nm--ap-to-conn ap))
+ settings)
+ (when conn
+ (setq settings (enwc-nm-get-settings conn)))
+ (when settings
+ (let* ((adr-info (caar (enwc-nm-get-dbus-dict-entry "ipv4/addresses"
settings)))
+ (ip-addr (enwc-nm-convert-addr (nth 0 adr-info)))
+ (netmask (enwc-nm-convert-addr (enwc-nm-prefix-to-netmask (nth 1
adr-info))))
+ (gateway (enwc-nm-convert-addr (nth 2 adr-info)))
+ (dns-list (mapcar 'enwc-nm-convert-addr
+ (car (enwc-nm-get-dbus-dict-entry "ipv4/dns"
+ settings))))
+ (sec-info (enwc-nm-get-sec-info settings)))
+ `((addr . ,ip-addr)
+ (netmask . ,netmask)
+ (gateway . ,gateway)
+ (dns1 . ,(nth 0 dns-list))
+ (dns2 . ,(nth 1 dns-list))
+ ,@sec-info)))))
+
(defun enwc-nm-finalize-settings (settings)
- "Set up all of the D-BUS types of a settings list.
-SETTINGS is the list of settings list to setup.
-This will place all of the necessary markers in the list,
-such as :array, :dict-entry, etc."
+ "Set up all of the D-BUS types of a settings list SETTINGS.
+This will place all of the necessary markers in the list, such as :array,
+:dict-entry, etc."
`(:array ,@(enwc-nm-alist-to-dbus-str-str-var-map-map settings)))
-(defun enwc-nm-setup-settings (wired id settings)
+(defun enwc-nm-setup-settings (conn settings wired)
"Set up NetworkManager settings.
-Gets the current network properties of network ID
+Get the current network properties of network CONN
and uses the information in the association list SETTINGS
to put it in the form that NetworkManager will recognize."
- (let ((ssid (enwc-nm-get-wireless-network-property id "Ssid"))
- (type (if wired "802-3-ethernet" "802-11-wireless"))
- (conn-settings (enwc-nm-get-settings id)))
- (push `("connection"
- (("id" (,(concat ssid " settings")))
- ("uuid" (,(enwc-nm-gen-uuid)))
- ("autoconnect" (nil))
- ("type" (,type))))
- conn-settings)
+ (let (conn-settings)
+ (if (enwc-nm-connection-p conn)
+ (setq conn-settings (enwc-nm-get-settings conn))
+ (message "Not a connection")
+ (print conn)
+ ;;TODO: ssid will be invalid for wired connections.
+ ;; This would actually throw an error in that case.
+ (let ((ssid (dbus-byte-array-to-string
(enwc-nm-get-wireless-network-property
+ conn "Ssid")))
+ (type (if wired "802-3-ethernet" "802-11-wireless")))
+ (setq conn-settings `(("connection"
+ (("id" (,(concat ssid " settings")))
+ ("uuid" (,(enwc-nm-gen-uuid)))
+ ("autoconnect" (nil))
+ ("type" (,type))))))))
(setq conn-settings (enwc-nm-process-profile-info conn-settings settings))
+ (pp conn-settings)
+ (print conn-settings)
(enwc-nm-finalize-settings conn-settings)))
+(defun enwc-nm-save-nw-settings (ap settings wired)
+ "Save network AP with settings SETTINGS."
+ (let ((conn (enwc-nm--ap-to-conn ap)))
+ (print conn)
+ (if conn
+ (enwc-nm-dbus-call-method "Update"
+ conn
+ enwc-nm-dbus-connections-interface
+ (enwc-nm-setup-settings conn settings wired))
+ (enwc-nm-dbus-call-method "AddConnection"
+ enwc-nm-dbus-settings-path
+ enwc-nm-dbus-settings-interface
+ (enwc-nm-setup-settings ap settings wired)))))
+
(defun enwc-nm-load ()
"Setup the NetworkManager back-end."
+ ;;TODO: Add way of changing these two after load.
(setq enwc-nm-wired-dev (enwc-nm-get-device-by-name enwc-wired-device)
enwc-nm-wireless-dev (enwc-nm-get-device-by-name enwc-wireless-device))
diff --git a/lisp/enwc-setup.el b/lisp/enwc-setup.el
index 0a4d69a..8d00c17 100644
--- a/lisp/enwc-setup.el
+++ b/lisp/enwc-setup.el
@@ -37,13 +37,15 @@
(interactive)
(unless backend
(setq backend
- (completing-read "Backend: " enwc-backends nil t)))
+ (intern (completing-read "Backend: " enwc-backends nil t))))
(when (and enwc-current-backend
(not (eq enwc-current-backend backend)))
(enwc-unload-backend))
(let ((service (symbol-value (intern (concat "enwc-"
(symbol-name backend)
"-dbus-service")))))
+ ;;TODO: Might need a better way of doing this.
+ ;; NM doesn't seem to want to ping.
(unless (dbus-ping :system service)
(error "Backend %s is not usable." backend))
diff --git a/lisp/enwc.el b/lisp/enwc.el
index 61a7f07..7c3a517 100644
--- a/lisp/enwc.el
+++ b/lisp/enwc.el
@@ -252,7 +252,8 @@ each word by SEPS, which defaults to \"-\"."
"Call FUNCTION on backend BACKEND.
FUNCTION is an ENWC function suffix string.
If the symbol BACKEND is not specified, then it defaults to
-`enwc-current-backend'."
+`enwc-current-backend'.
+ARGS are passed in to the function."
(unless backend
(setq backend enwc-current-backend))
(apply (intern (format "enwc-%s-%s" backend function)) args))
@@ -419,6 +420,7 @@ This is initiated during setup, and runs once every second."
(defun enwc-enable-auto-scan ()
"Enable auto scanning."
+ (interactive)
(unless enwc-scan-timer
(setq enwc-scan-timer
(run-at-time t enwc-auto-scan-interval 'enwc-scan t)))
@@ -427,6 +429,7 @@ This is initiated during setup, and runs once every second."
(defun enwc-disable-auto-scan ()
"Disable auto scanning."
+ (interactive)
(when enwc-scan-timer (cancel-timer enwc-scan-timer))
(setq enwc-auto-scan nil)
(message "Auto scan disabled"))
@@ -571,7 +574,8 @@ NETWORKS must be in the form returned from
(mapcar
(lambda (det)
`(,(alist-get 'display (cdr det))
- ,(alist-get 'width (cdr det))))
+ ,(alist-get 'width (cdr det))
+ t))
enwc-details-alist)))
(setq tabulated-list-entries
@@ -772,7 +776,7 @@ VALS is the list of widget values."
:indent ,(+ 4 (length (enwc--sym-to-str key)))
:args ,(mapcar
(lambda (arg)
- `(item :tag (upcase ,arg) :value
,(downcase arg)))
+ `(item :tag ,(upcase arg) :value
,(downcase arg)))
args)))))
(defmacro enwc--make-supplicant-choice (key &rest args)
@@ -1029,6 +1033,7 @@ and redisplays the settings from the network profile
"Edit the current network entry."
(interactive)
(setq enwc-edit-id (tabulated-list-get-id))
+ ;;TODO: This is really annoying.
(select-window (split-window))
(enwc-setup-edit-buffer))
- [elpa] master 773cef6 24/76: (enwc-backend-symbol-list): New variable., (continued)
- [elpa] master 773cef6 24/76: (enwc-backend-symbol-list): New variable., Ian Dunn, 2017/02/23
- [elpa] master b5686da 17/76: (enwc-wicd-get-sec-types): Removed., Ian Dunn, 2017/02/23
- [elpa] master 7914c48 10/76: (enwc-format-mode-line-string, enwc-update-mode-line): Added the option to customize the information displayed in the mode line., Ian Dunn, 2017/02/23
- [elpa] master 59ca546 20/76: (enwc--str-to-sym): Fixed., Ian Dunn, 2017/02/23
- [elpa] master 1722c02 33/76: enwc-cm.el: Fixed up header and footer., Ian Dunn, 2017/02/23
- [elpa] master c8a0397 29/76: Fixed some compilation errors in enwc.el., Ian Dunn, 2017/02/23
- [elpa] master bb68ed5 37/76: Added ignore rules for byte compiled files., Ian Dunn, 2017/02/23
- [elpa] master 6ed7137 43/76: Fix adding to global-mode-string., Ian Dunn, 2017/02/23
- [elpa] master 968e6f0 46/76: Added tag 2.0 for changeset cc2f7aa4ed36, Ian Dunn, 2017/02/23
- [elpa] master 2d5def6 36/76: (*-function): Removed., Ian Dunn, 2017/02/23
- [elpa] master d9cbdb9 39/76: Added some section headers.,
Ian Dunn <=
- [elpa] master 03a5464 57/76: Changed channel to an integer., Ian Dunn, 2017/02/23
- [elpa] master a6b2b03 61/76: Removed tag 2.0, Ian Dunn, 2017/02/23
- [elpa] master 3491895 14/76: Cleaned up code and consolidated front-end functions., Ian Dunn, 2017/02/23
- [elpa] master 14bcaf4 67/76: Fixed bug with NetworkManager loading, Ian Dunn, 2017/02/23
- [elpa] master 4e43aaf 53/76: Moved editing commands to separate file., Ian Dunn, 2017/02/23
- [elpa] master 141ad1b 65/76: Fixed NetworkManager connection bug., Ian Dunn, 2017/02/23
- [elpa] master 8f08bcb 58/76: Cleaned up network display., Ian Dunn, 2017/02/23
- [elpa] master c30c0d7 38/76: Fixed up a lot of security handling problems., Ian Dunn, 2017/02/23
- [elpa] master 710001f 75/76: Removed packages/enwc in preparation for subtree pull., Ian Dunn, 2017/02/23
- [elpa] master da7e3c6 76/76: Add 'packages/enwc/' from commit 'a3c59cce3482babc7c0518e7ff9da246158b9420', Ian Dunn, 2017/02/23