X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/341dd15a7bd9d0b4adff846e94289b3e1877eed1..3ca74e5368a1022e332a0601d9be2418dbe8c083:/lisp/net/zeroconf.el diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el index a3445ead37..d801a4c094 100644 --- a/lisp/net/zeroconf.el +++ b/lisp/net/zeroconf.el @@ -1,16 +1,16 @@ ;;; zeroconf.el --- Service browser using Avahi. -;; Copyright (C) 2008 Free Software Foundation, Inc. +;; Copyright (C) 2008-2011 Free Software Foundation, Inc. ;; Author: Michael Albinus ;; Keywords: comm, hardware ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -18,8 +18,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, see -;; . +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -104,10 +103,11 @@ ;; disabled with configuration option "--without-dbus". Declare used ;; subroutines and variables of `dbus' therefore. (eval-when-compile - (require 'cl) - (declare-function dbus-call-method "dbusbind.c") - (declare-function dbus-register-signal "dbusbind.c") - (defvar dbus-debug)) + (require 'cl)) + +(declare-function dbus-call-method "dbusbind.c") +(declare-function dbus-register-signal "dbusbind.c") +(defvar dbus-debug) (require 'dbus) @@ -334,7 +334,24 @@ The attributes of SERVICE can be retrieved via the functions (let ((l-hook (gethash type zeroconf-service-removed-hooks-hash nil))) (add-hook 'l-hook function) (puthash type l-hook zeroconf-service-removed-hooks-hash))) - (t (error "EVENT must be either `:new' or `:removed'.")))) + (t (error "EVENT must be either `:new' or `:removed'")))) + +(defun zeroconf-service-remove-hook (type event function) + "Remove FUNCTION from the hook of service type TYPE. + +EVENT must be either :new or :removed and has to match the event +type used when registering FUNCTION." + (let* ((table (cond + ((equal event :new) + zeroconf-service-added-hooks-hash) + ((equal event :removed) + zeroconf-service-removed-hooks-hash) + (t (error "EVENT must be either `:new' or `:removed'")))) + (l-hook (gethash type table nil))) + (remove-hook 'l-hook function) + (if l-hook + (puthash type l-hook table) + (remhash type table)))) (defun zeroconf-get-host () "Returns the local host name as string." @@ -407,7 +424,7 @@ TYPE. The resulting list has the format (elt (nth 9 result))) ;; TXT. ;; The TXT field has the signature "aay". Transform to "as". (while elt - (setcar elt (apply 'string (car elt))) + (setcar elt (dbus-byte-array-to-string (car elt))) (setq elt (cdr elt))) (when nil ;; We discard it, no use so far. @@ -482,7 +499,7 @@ DOMAIN is nil, the local domain is used." (dbus-ping :system zeroconf-service-avahi) (dbus-call-method :system zeroconf-service-avahi zeroconf-path-avahi - zeroconf-interface-avahi-server "IsNSSSupportAvailable")) + zeroconf-interface-avahi-server "GetVersionString")) ;; Reset all stored values. (setq zeroconf-path-avahi-service-type-browser nil @@ -599,7 +616,7 @@ DOMAIN is nil, the local domain is used." ;; The "TXT" field has the signature "aay". Transform to "as". (let ((elt (nth 9 val))) (while elt - (setcar elt (apply 'string (car elt))) + (setcar elt (dbus-byte-array-to-string (car elt))) (setq elt (cdr elt)))) (when zeroconf-debug (message "zeroconf-service-resolver-handler: %s %S" @@ -641,11 +658,7 @@ For the description of arguments, see `zeroconf-resolved-services-hash'." ;; The TXT field has the signature "as". Transform to "aay". (dolist (elt txt) - (let (args) - (add-to-list - 'result - (dolist (elt1 (string-to-list elt) (append '(:array) args)) - (setq args (append args (list :byte elt1))))))) + (add-to-list 'result (dbus-string-to-byte-array elt))) ;; Add the service. (dbus-call-method @@ -673,5 +686,4 @@ For the description of arguments, see `zeroconf-resolved-services-hash'." (provide 'zeroconf) -;; arch-tag: ea578165-7fa8-44f4-90f0-de3940aec69f ;;; zeroconf.el ends here