Skip to content

Commit

Permalink
Add Jabber client.
Browse files Browse the repository at this point in the history
  • Loading branch information
technomancy committed Dec 19, 2008
1 parent cd23f0c commit b6f578c
Show file tree
Hide file tree
Showing 53 changed files with 11,353 additions and 2 deletions.
15 changes: 15 additions & 0 deletions elpa-to-submit/jabber/AUTHORS
@@ -0,0 +1,15 @@
Developers:
Tom Berger
Magnus Henoch

Contributors:
Mathias Dahl
Mario Domenech Goulart
Nolan Eakins
François Fleuret
Justin Kirby
Carl Henrik Lunde
Andrey Slusar


arch-tag: 15700144-3BD9-11D9-871C-000A95C2FCD0
92 changes: 92 additions & 0 deletions elpa-to-submit/jabber/NEWS
@@ -0,0 +1,92 @@
-*- mode: outline -*-

* New features in jabber.el 0.7

** SSL connections possible
See variable `jabber-connection-type'.

** Chat buffers rewritten
New modular design gives increased extensibility.
*** Received URLs are displayed
*** Long lines are filled
See jabber-chat-fill-long-lines.
*** Rare timestamps are printed by default
See jabber-print-rare-time and jabber-rare-time-format.

** MUC features
*** Different default nicknames for different MUC rooms
See jabber-muc-default-nicknames.
*** Autojoin MUC rooms on connection
See jabber-muc-autojoin.
*** Change nickname
Actually simply an alias from jabber-muc-nick to jabber-groupchat-join.
*** Invitations
Both sending and receiving invitiations is supported.
*** Basic affiliation change support
(Not finished)
*** Private MUC messages
*** Support for setting and displaying topic

** Global key bindings
Global keymap under C-x C-j.

** Vcard viewer and editor

** Roster export

** Message events (JEP-0022)

** Easy way to define external notifiers
See define-jabber-alert. Alerts for Festival (speech synthesis),
Sawfish, and xmessage added.

** Activity mode improved
Can now display count in frame title. Update hook added.

** Roster display optimized

** Optionally use per-contact history files

** Jabber menu in menubar not enabled by default
Call jabber-menu to have it there.

** Flyspell in chat buffers
Flyspell will only spell check what you're currently writing.

** Different time formats for instant and delayed messages
See `jabber-chat-time-format' and `jabber-chat-delayed-time-format'.
You can see the complete timestamp in a tooltip by holding the mouse
over the prompt.

** Chat buffers in inactive windows are scrolled

** Roster is sorted by name also

* New features in jabber.el 0.6.1

** Message history
Set jabber-history-enabled to t to activate it.

** Backlogs
If you have history enabled, the last few messages are inserted when
you open a new chat buffer.

** Activity tracking on the mode line
Activate it with M-x jabber-activity-mode.

** Receive an alert when a specific person goes online
Use it with M-x jabber-watch-add.

** Support for /me in chats
As in "/me laughs" etc.

** Message alerts for current buffer can be disabled
Set jabber-message-alert-same-buffer to nil to do that.

** Basic moderation support in MUC

** MUC alerts are separated from ordinary message alerts
Customize jabber-alert-muc-hooks to get your desired behaviour.


arch-tag: 1CE20E4E-3BD9-11D9-8D64-000A95C2FCD0
104 changes: 104 additions & 0 deletions elpa-to-submit/jabber/README
@@ -0,0 +1,104 @@
This is jabber.el 0.7, a Jabber client for Emacs. If you don't know
what Jabber is, see http://www.jabber.org .

Home page: http://emacs-jabber.sourceforge.net
Project page: http://sourceforge.net/projects/emacs-jabber
Wiki page: http://www.emacswiki.org/cgi-bin/wiki/JabberEl
Mailing list: http://lists.sourceforge.net/lists/listinfo/emacs-jabber-general
and: http://dir.gmane.org/gmane.emacs.jabber.general

GNU Emacs
=========

jabber.el depends on GNU Emacs 21, in particular xml.el, and some
files from Gnus 5.10. If you don't have Gnus 5.10 (M-x gnus-version
will tell), you can download sha1.el and hex-util.el from Gnus CVS
at http://quimby.gnus.org/cgi-bin/cvsweb.cgi/gnus/lisp/ . For your
convenience, these files are included in the tarball.

XEmacs
======

You need an XEmacs with Mule support, and recent versions of the gnus,
net-utils and mule-ucs packages. jabber.el basically works on XEmacs,
but some features are missing (in particular mouse support). Testing
and patches are very welcome.

SASL
====
jabber.el will use the SASL library of FLIM (Faithful Library about
Internet Message; it is also included in newer versions of Gnus) if
it's present. If not, it will fall back to JEP-0077 authentication.

TLS/SSL
=======
To get an encrypted connection, you need either tls.el (from Gnus) or
ssl.el. These are interfaces to GnuTLS and OpenSSL, respectively; use
the appropriate one. Recent versions of tls.el support both programs,
though. The version of ssl.el distributed with Gnus is outdated; use
the one from W3 CVS instead:
http://cvs.savannah.gnu.org/viewcvs/w3/lisp/ssl.el?root=w3

To actually use encryption, customize the variables
jabber-connection-type and jabber-connection-ssl-program.

Note that only the connection from you to the server is encrypted;
there is no guarantee of other connections being encrypted.

StartTLS is not supported in this version of jabber.el.

Installation
============
To install, put all .el files somewhere in your load-path (or have
your load-path include the directory they're in) and put
(require 'jabber) in your .emacs file. To install the Info
documentation, copy jabber.info to /usr/local/info and run
"install-info /usr/local/info/jabber.info".

If you've been using a post-0.6 CVS version of jabber.el, you might
need to remove some redundant hook functions. Make sure that
jabber-alert-message-hooks doesn't contain jabber-message-history, and
that jabber-alert-presence-hooks doesn't contain
jabber-presence-watch.

Usage
=====
To start using it, type M-x jabber-customize and set your username and
server. Then, type C-x C-j C-c (or equivalently M-x jabber-connect)
to connect (with prefix argument, register new account).

Your roster is displayed in a buffer called *-jabber-*. To
disconnect, type C-x C-j C-d or M-x jabber-disconnect.

You may want to use the menu bar to execute Jabber commands. To
enable the Jabber menu, type M-x jabber-menu.

For a less terse description, read the enclosed manual.

For bug reports, help requests and other feedback, use the trackers
and forums at the project page mentioned above.

Configuration
=============
All available configuration options are described in the manual. This
section only serves to point out the most important ones.

To change how you are notified about incoming events, type M-x
customize-group RET jabber-alerts.

To activate logging of all chats, set jabber-history-enabled to t. By
default, history will be saved in ~/.jabber_global_message_log; make
sure that this file has appropriate permissions. Type M-x
customize-group RET jabber-history for more options.

By default, jabber.el will send a confirmation when messages sent to
you are delivered and displayed, and also send "contact is typing"
notifications. To change this, type M-x customize-group RET
jabber-events, and set the three jabber-events-confirm-* variables to
nil.

File transfer
=============
This release of jabber.el contains experimental support for file
transfer. It is not enabled by default. See the file
filetransfer.txt for details.
55 changes: 55 additions & 0 deletions elpa-to-submit/jabber/filetransfer.txt
@@ -0,0 +1,55 @@
-*- outline -*-
* File transfer

This release of jabber.el contains some support for file transfer.
Both sending and receiving files are supported. Since this feature
needs more testing, it is not enabled by default. To enable it, add

(require 'jabber-ft-server)
(require 'jabber-ft-client)
(require 'jabber-socks5)

to your .emacs file. Please share your experiences - does it work for
you? Can you suggest any improvements?

** Sending files

Sending files over Jabber normally requires the ability to listen on a
network port. As of Emacs 21.3 and XEmacs 21.4, elisp programs can't
do this, so you have to specify a JEP-0065 proxy. The variable
jabber-socks5-proxies is a list of proxies to use. "proxy.jabber.org"
and "proxy65.jabber.ccc.de" are the only proxies I know of.

After you have specified one or more proxies, jabber.el needs to know
their network addresses. Type M-x jabber-socks5-query-all-proxies,
and watch the progress in the echo area. Note that you have to be
connected when you do this, and that you have to do this every
session.

To send a file, type M-x jabber-ft-send. You will be asked for which
file to send, and whom to send it to. You have to specify a complete
JID with resource, such as user@domain/resource - only user@domain
will not work. To see the resources of your contacts, set
jabber-show-resources to t and type M-x jabber-display-roster.

While the file is being sent, your Emacs will be locked up and you
can't do anything else. Hopefully, this will be fixed some time.

** Receiving files

When someone tries to send a file to you, you will get a message
either in the echo area or in a dialog box, asking you to confirm.
You will also be asked for where to save the file.

Receiving a file should not cause any interruption to your work. If
it does, please tell.

** Protocol details

See JEPs 95, 96 and 65.

SOCKS5 (JEP-0065) is the only stream method currently supported by
jabber.el, in conflict with JEP-0096, which requires that In-Band
Bytestreams be supported as well.

Range requests are not supported, neither in sending nor in receiving.
75 changes: 75 additions & 0 deletions elpa-to-submit/jabber/hex-util.el
@@ -0,0 +1,75 @@
;;; hex-util.el --- Functions to encode/decode hexadecimal string.

;; Copyright (C) 1999, 2001, 2002, 2003, 2004,
;; 2005 Free Software Foundation, Inc.

;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
;; Keywords: data

;; This file is part of FLIM (Faithful Library about Internet Message).

;; This program 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 2, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:

;;; Code:

(eval-when-compile
(defmacro hex-char-to-num (chr)
(` (let ((chr (, chr)))
(cond
((and (<= ?a chr)(<= chr ?f)) (+ (- chr ?a) 10))
((and (<= ?A chr)(<= chr ?F)) (+ (- chr ?A) 10))
((and (<= ?0 chr)(<= chr ?9)) (- chr ?0))
(t (error "Invalid hexadecimal digit `%c'" chr))))))
(defmacro num-to-hex-char (num)
(` (aref "0123456789abcdef" (, num)))))

(defun decode-hex-string (string)
"Decode hexadecimal STRING to octet string."
(let* ((len (length string))
(dst (make-string (/ len 2) 0))
(idx 0)(pos 0))
(while (< pos len)
;;; logior and lsh are not byte-coded.
;;; (aset dst idx (logior (lsh (hex-char-to-num (aref string pos)) 4)
;;; (hex-char-to-num (aref string (1+ pos)))))
(aset dst idx (+ (* (hex-char-to-num (aref string pos)) 16)
(hex-char-to-num (aref string (1+ pos)))))
(setq idx (1+ idx)
pos (+ 2 pos)))
dst))

(defun encode-hex-string (string)
"Encode octet STRING to hexadecimal string."
(let* ((len (length string))
(dst (make-string (* len 2) 0))
(idx 0)(pos 0))
(while (< pos len)
;;; logand and lsh are not byte-coded.
;;; (aset dst idx (num-to-hex-char (logand (lsh (aref string pos) -4) 15)))
(aset dst idx (num-to-hex-char (/ (aref string pos) 16)))
(setq idx (1+ idx))
;;; (aset dst idx (num-to-hex-char (logand (aref string pos) 15)))
(aset dst idx (num-to-hex-char (% (aref string pos) 16)))
(setq idx (1+ idx)
pos (1+ pos)))
dst))

(provide 'hex-util)

;;; arch-tag: fe8aaa79-6c86-400e-813f-5a8cc4cb3859
;;; hex-util.el ends here

0 comments on commit b6f578c

Please sign in to comment.