Compare commits

..

1038 Commits

Author SHA1 Message Date
Badlop 771da0e1d6 Preliminary release notes for 3.0.0 2010-08-06 13:32:29 +02:00
Badlop 75d8d8a43e Fix minor typo in log message 2010-08-06 11:08:19 +02:00
Badlop 80610e62f8 Require the latest exmpp version released 2010-08-06 00:54:25 +02:00
Badlop fa9b8d63f9 Ensure the default virtual host "localhost" is defined and is the first 2010-08-05 22:19:41 +02:00
Badlop d4316558de When an obsolete ODBC module is starting, switch to the normal one 2010-08-05 00:49:58 +02:00
Christophe Romain 690857e0d4 enforce disco features results (thanks to Karim)(EJAB-1033, EJAB-1228, EJAB-1238) 2010-08-04 18:30:22 +02:00
Badlop 73705a3b2e Explain better what's the problem with the option clusterid 2010-08-04 14:03:33 +02:00
Evgeniy Khramtsov 7510a54f81 Loading ASN.1 driver explicitly to avoid races in LDAP (EJAB-1284) 2010-08-04 19:25:18 +10:00
Badlop 8235c9eea1 Change record() to tuple() so Dialyzer can run 2010-08-02 23:47:11 +02:00
Badlop 8cd32f9706 Change syntax of type declarations so Dialyzer accepts them 2010-08-02 23:45:51 +02:00
Badlop b28b9686fe Copy latest release notes from the 2.1.x branch 2010-08-02 17:53:30 +02:00
Badlop 72b9d8b250 Remove unused and useless SVN keywords 2010-08-02 16:03:05 +02:00
Badlop 6abfea6d8d Minor cosmetic change in clusterid description 2010-08-02 15:48:35 +02:00
Badlop d599aba9ca Fix example GSSAPI config 2010-07-31 01:09:47 +02:00
Badlop 02f19c0c1d Only start GSSAPI support when configured, and when esasl is found 2010-07-31 01:08:11 +02:00
Badlop 3181685158 Support parallel extauth script (thanks to Jesse Thompson)(EJAB-1280) 2010-07-30 20:34:01 +02:00
Badlop f93c6c2b35 Copy translations from 2.1.x branch, and update 2010-07-30 16:50:03 +02:00
Badlop a134626849 Fix some English strings 2010-07-30 16:49:31 +02:00
Badlop 31198d6c63 Fix regexp call 2010-07-30 16:49:04 +02:00
Badlop 92dc45ad76 Don't call modules that were obsoleted by GS 2010-07-30 13:22:03 +02:00
Badlop 8a5b08e3f0 New access option in mod_roster to disable changes (EJAB-72) 2010-07-30 13:21:58 +02:00
Badlop 1a368436b4 Use the term 'room' instead of 'chatroom' and 'conference' 2010-07-30 00:06:19 +02:00
Badlop 59a19ca87a Don't offer SASL auth before doing TLS if TLS is required (thanks to Etan Reisner)
Originally reported in
http://yo.jabber.ru/bugzilla/show_bug.cgi?id=251

Implements:
http://tools.ietf.org/html/rfc3920#section-6.2
If Use of TLS (Section 5) needs to be
established before a particular authentication mechanism may be used, the
receiving entity MUST NOT provide that mechanism in the list of available SASL
authentication mechanisms prior to TLS negotiation.
2010-07-29 23:14:03 +02:00
Badlop e653598cd0 Allow mod_caps and shared_roster to start, they don't really need to use GS 2010-07-29 20:35:30 +02:00
Badlop 891c9610e9 Remove support to migrate mod_muc from ejabberd 0.7.5 or older 2010-07-29 20:24:46 +02:00
Badlop 9265c23e1a Don't say v1.2, because that number is never increased and is confusing 2010-07-28 20:00:47 +02:00
Badlop 11130806f9 Return Registered element when account exists (thanks to PioneerMike) 2010-07-28 19:48:06 +02:00
Badlop 0d065dd021 Fix Edoc comments 2010-07-23 13:36:35 +02:00
Badlop f5dc8d2f78 Document GSSAPI (EJAB-831) 2010-07-23 01:23:39 +02:00
Badlop 07e459d577 Various fixes (EJAB-831) 2010-07-23 01:23:37 +02:00
Badlop aa791ad0c4 Support SASL GSSAPI authentication (thanks to Mikael Magnusson)(EJAB-831) 2010-07-23 01:23:35 +02:00
Badlop 17fc992ba9 Recompile the guide and configure 2010-07-23 00:30:52 +02:00
Badlop 115392ff2d Add MH and GS specific options to ejabberd.cfg.example 2010-07-23 00:30:45 +02:00
Badlop b1545d1d7d Document GS in the Guide, undocument the mod_*_odbc 2010-07-23 00:30:43 +02:00
Badlop 9e2d614b41 Update ejabberd version from 3.0.0-prealpha to 3.0.0-alpha-x 2010-07-23 00:30:41 +02:00
Badlop 917c5edfe5 Mark as obsolete the modules that use odbc instead of GS 2010-07-23 00:30:37 +02:00
Badlop 1285bd52c9 Fix ejabberd_odbc code 2010-07-23 00:30:33 +02:00
Badlop 597c1c87d4 Fix ejabberd modules 2010-07-23 00:30:32 +02:00
Badlop 58bed2cbff Fix core files 2010-07-23 00:30:31 +02:00
Badlop 13fad04d14 Fix GS 2010-07-23 00:30:29 +02:00
Badlop eb2ad7e699 Patch modules for GS (thanks to Stephan Maka) 2010-07-23 00:29:40 +02:00
Badlop 511f73812d Patch core for GS (thanks to Stephan Maka) 2010-07-23 00:29:36 +02:00
Badlop a7d9fa7301 New files for GS (thanks to Stephan Maka) 2010-07-23 00:29:34 +02:00
Badlop bb77c39553 Patch ODBC modules for MH (thanks to Alexey Shchepin and Geoff Cant) 2010-07-23 00:29:32 +02:00
Badlop a1a6bd79ac Patch mnesia modules for MH (thanks to Alexey Shchepin and Geoff Cant) 2010-07-23 00:29:30 +02:00
Badlop cdb379a22c Patch core for MH (thanks to Alexey Shchepin and Geoff Cant) 2010-07-23 00:29:28 +02:00
Badlop 9336356efd New files for MH (thanks to Alexey Shchepin and Geoff Cant)
Thanks to:
Alexey Shchepin for planning and developing MH in late 2007
Geoff Cant for improving during 2008 and 2009
Christophe Romain and Badlop for merging into master in 2010
2010-07-23 00:29:26 +02:00
Badlop 8e9888c411 When logging s2s out connection attempt or success, log if TLS is used 2010-07-23 00:27:26 +02:00
Badlop 027418aba5 The command Update now returns meaningful message and exit-status (EJAB-1237) 2010-07-22 16:38:04 +02:00
Christophe Romain f36da63a3a Allow roster change from external component (TECH-1001) 2010-07-22 11:06:51 +02:00
Christophe Romain 5bc9860f5d add ejabberdctl ability to check epmd names (TECH-1121) 2010-07-20 14:05:18 +02:00
Badlop c237570bc2 Describe what a user gets when he hits the registration_timeout limit 2010-07-19 12:13:00 +02:00
Badlop 0dcbe10a22 Only compile etop_tr.erl when running: make debugtools=true 2010-07-19 12:12:30 +02:00
Badlop 581f011b28 Fix warning about unused variable 2010-07-19 12:11:10 +02:00
Christophe Romain fb2c74c4aa add missing hrl 2010-07-16 18:55:58 +02:00
Christophe Romain 8dbd6007ed Add etop command to ejabberdctl 2010-07-16 16:24:55 +02:00
Evgeniy Khramtsov c9faa5bde7 correct handling of SQL boolean types (EJAB-1275) 2010-07-14 21:57:32 +10:00
Christophe Romain de6675a433 Added catches to reset_stream calls to avoid errors during a race condition (thanks to Aleksey Shchepin) 2010-07-13 22:13:38 +02:00
Christophe Romain 81d364a97a Make chat room destroy and create being sync_dirty to limit mnesia overload. (thanks to Mickael Remond) 2010-07-13 22:09:48 +02:00
Christophe Romain 02b7ba50fe Try forcing usage of cache for all MySQL sessions, and add correct timeout on odbc driver query. (thanks to Mickael Remond) 2010-07-13 22:08:16 +02:00
Christophe Romain e64d69350f Add rate limit command to ejabberd_listener. You can now limit the max number of TCP connects per second on a given port. (thanks to Mickael Remond) 2010-07-13 22:07:43 +02:00
Badlop 2b48732de4 Fix my flock change from last friday 2010-07-12 18:53:28 +02:00
Badlop 29e626bf80 Remove ejabberd_debug because p1_prof provides similar and better features 2010-07-12 16:03:47 +02:00
Badlop 2e13a56ca9 Only compile and install p1_prof when: make debugtools=true 2010-07-12 16:03:44 +02:00
Badlop 976baccceb Raise requirement to Erlang/OTP R12B-5 (EJAB-953) 2010-07-12 15:21:31 +02:00
Badlop f8412d7c5d When using OTP R14, use public_key library instead of old ssl (EJAB-953) 2010-07-12 13:58:10 +02:00
Badlop 5a8d99232c Mention missing modules in the overview table 2010-07-11 12:21:57 +02:00
Badlop fe70217703 Some systems delete the lock dir; in such case don't use flock at all 2010-07-09 22:40:32 +02:00
Evgeniy Khramtsov 20f6e4714e Added functions to collect statistics about queues, memory, reductions etc. Several cleanups 2010-07-10 01:37:28 +10:00
Evgeniy Khramtsov b76eba62ea New ejabberd profiler 2010-07-05 13:46:49 +10:00
Badlop 5b6351577a Fix print of command result that contains ~ (thanks to Tsukasa Hamano) 2010-07-03 00:45:46 +02:00
Badlop 894f0abdfa Prevent Dialyzer warnings about case inside macro 2010-07-02 23:40:51 +02:00
Badlop c89944fe12 Don't handle useless case of Affiliation none 2010-07-02 23:40:51 +02:00
Badlop fe1a4908b5 Move deeply nested cases to functions, and fix affiliation changes. 2010-07-02 23:40:51 +02:00
Evgeniy Khramtsov d60ef4c212 Use ets insead of asking supervisor in ejabberd_odbc_sup:get_pids/1 (Thanks to Alexey Shchepin) 2010-07-03 00:35:34 +10:00
Badlop 5161a9d4e8 Show some more room options in the log file 2010-07-02 15:21:05 +02:00
Badlop eb0dc4f4ca Document the mod_muc option captcha_protected 2010-07-02 13:09:11 +02:00
Badlop 6b9a523dc9 Recompile the Guide and Configure 2010-07-01 17:08:17 +02:00
Badlop 3e97054390 Requirement of OpenSSL increased from 0.9.6 to 0.9.8 2010-07-01 17:06:25 +02:00
Badlop 69d10702ee Fix typo in --enable-transient_supervisors 2010-07-01 17:05:24 +02:00
Christophe Romain 455107ff5f fix some dialyzer warnings on pubsub (EJAB-1260) 2010-07-01 11:19:48 +02:00
Badlop 5ca3f221cc Fix privacy check when serving local Last (thanks to Brian Acton)(EJAB-1271) 2010-06-29 11:59:16 +02:00
Badlop 7ffe06c77f Fix binary Host argument 2010-06-28 13:54:43 +02:00
Badlop bdea5d3598 Fix problem when FIREWALL_WINDOW options for erl kernel were used 2010-06-28 13:18:48 +02:00
Badlop a07eb3e023 Fix missing closing right parenthesis in define 2010-06-28 12:23:18 +02:00
Badlop c3ef12debb Inform client that SSL session caching is disabled (thanks to Pawel Chmielowski) 2010-06-25 18:33:59 +02:00
Badlop 739412119e Don't ask for client certificate when using tls (EJAB-1267) 2010-06-25 18:33:56 +02:00
Badlop 90d9ed1ee4 OpenSSL is required, not optional 2010-06-25 16:59:15 +02:00
Badlop 7d96d831c1 Fix Edoc typo 2010-06-25 00:03:38 +02:00
Badlop b2eb9bc512 Fix some binary variables 2010-06-24 00:22:26 +02:00
Badlop 71fc696f81 When account is deleted, delete also member of stored shared rosters. 2010-06-24 00:04:02 +02:00
Evgeniy Khramtsov 234280ddc7 now admins are able to see private rooms in disco (EJAB-1269) 2010-06-23 17:51:05 +10:00
Badlop 7a76cabe26 Varied fixes in mod_muc_room 2010-06-22 00:11:41 +02:00
Badlop a610d8b699 Several fixes about binary in mod_muc_room 2010-06-22 00:11:41 +02:00
Badlop 98a78b7955 Several fixes about binary in mod_muc 2010-06-22 00:11:41 +02:00
Badlop 493d3bc7aa Fix language string 2010-06-22 00:11:41 +02:00
Badlop ac6ae9e8dd Fix xmlcdata binary content 2010-06-22 00:11:41 +02:00
Badlop a6c0a3d59b Fix exmpp parser options 2010-06-22 00:11:41 +02:00
Badlop 0b5bcaf74a Remove some unused cases clauses 2010-06-22 00:11:41 +02:00
Badlop 3ee28ef7cc Throw a meaningful error when the URL can't be parsed 2010-06-22 00:11:41 +02:00
Badlop 3f68689367 Handle when username in shared roster members is undefined 2010-06-22 00:11:41 +02:00
Badlop 6fc578f2ee Use string instead of binary for body content 2010-06-22 00:11:41 +02:00
Badlop cd4c730b9c Fix pattern match 2010-06-22 00:11:41 +02:00
Evgeniy Khramtsov b0b66be747 Added md2/1 support 2010-06-22 02:57:58 +10:00
Evgeniy Khramtsov e04a690303 New OpenSSL functions wrapper: sha224/1, sha256/1, sha384/1, sha512/1 2010-06-22 02:34:27 +10:00
Badlop bc44a3584f Fix detection of push roster item unsubscribed 2010-06-18 21:24:52 +02:00
Badlop 5e986442a2 Remove duplicate function from mod_roster 2010-06-18 21:24:52 +02:00
Badlop 19ad0eb238 Fid mod_roster_odbc binary arguments 2010-06-18 21:24:52 +02:00
Badlop fe4944e031 Provide iq instead of xmlel in roster webadmin changes 2010-06-18 21:24:51 +02:00
Badlop a51df8db6e Fix build of blank JID 2010-06-18 21:24:51 +02:00
Badlop b605295f9d Fix call to exmpp_stanza:error 2010-06-18 21:24:51 +02:00
Badlop dd69d47543 Fix xmlcdata binary content 2010-06-18 21:24:51 +02:00
Badlop 3b7449fb92 Fix result IQ vcard stanza 2010-06-18 21:24:51 +02:00
Badlop 0514ccb047 Remove function clause that is never called 2010-06-18 21:24:51 +02:00
Badlop cab6ee9d86 Fix some exmpp calls 2010-06-18 21:24:51 +02:00
Badlop 63032e1397 Fix xmlcdata type 2010-06-18 21:24:51 +02:00
Badlop 8cef084bd2 New mod_echo option client_version for the educational example 2010-06-18 21:24:51 +02:00
Badlop 6942d0bcc3 Remove in mod_caps handle of unused md5 hash 2010-06-18 21:24:51 +02:00
Badlop 979c2b5a74 Fix binary arguments 2010-06-18 21:24:51 +02:00
Badlop a62a9b6460 Remove unused function, and unused os:type return 2010-06-18 21:24:51 +02:00
Badlop 67da88f0bd Improve ejabberd's broadcast stanzas to satisfy #xmlel type 2010-06-18 21:24:51 +02:00
Badlop 4fd7ec27f5 OTP doc says the Command in the open_port spawn tuple must be string() 2010-06-18 21:24:51 +02:00
Badlop 19a8b79342 Improve handle of inet:gethostbyname return 2010-06-18 21:24:51 +02:00
Badlop be111b6749 More remove support for XEP-0018 (EJAB-810) 2010-06-18 21:24:51 +02:00
Badlop b6711e407e Remove support for the rejected XEP-0018 Invisible Presence (EJAB-810) 2010-06-17 22:43:15 +02:00
Badlop 3bcc60066e Throw error when tls has no_certfile, instead of returning error tuple 2010-06-17 22:39:01 +02:00
Badlop 8d783bae15 Fix roster webadmin display 2010-06-17 15:55:33 +02:00
Badlop e0bdbcf063 Fix exmpp bug in mod_pubsub_odbc 2010-06-17 15:55:06 +02:00
Badlop f32332cdfc Rebuilt the configure script with: autoconf 2010-06-16 16:06:44 +02:00
Peter Lemenkov 399bb31e13 Pass correct version to autoreconf
It seems that AC_INIT macro is wrongly initialized. See this link
for explanation of a particular AC_INIT variables:

http://www.gnu.org/software/autoconf/manual/html_node/Initializing-configure.html

Briefly, AC_INIT macro should be populated with the following data:

AC_INIT (package, version, [bug-report], [tarname], [url])

Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
2010-06-16 16:06:16 +02:00
Peter Lemenkov eae5d1b764 Install COPYING file along with other docs
It's a generally good idea to provide file with licensing terms.

Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
2010-06-16 16:06:14 +02:00
Peter Lemenkov 1459cb8a56 Install dev.html, and guide.pdf if it exists
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
2010-06-16 16:06:11 +02:00
Christophe Romain 53638d094a remove outdated and useless file, use ejabberdctl.template instead 2010-06-16 12:20:46 +02:00
Badlop 8d3fd94d7d Log error when HTTP request has ambiguous Host header (EJAB-1261) 2010-06-16 11:45:13 +02:00
Badlop e27dda3ff1 Fix for Erlang R12, that doesn't support: true andalso ok 2010-06-15 23:01:13 +02:00
Jerome Sautret 1142cdad1b Discard queued requests that are too old (the caller has already got a timeout).
(cherry picked from commit 0e5b930b22)
2010-06-11 16:38:19 +02:00
Christophe Romain 2028698336 Fix bad pattern matching on undefined resource 2010-06-10 18:26:21 +02:00
Badlop 5d1d797330 Explain that 2 LDAP connections are established per vhost 2010-06-10 15:03:30 +02:00
Christophe Romain a67539075f prevent pubsub filtering too much packets 2010-06-10 14:25:46 +02:00
Badlop 75053cf40d Fix to push new contacts to connected users 2010-06-10 13:45:46 +02:00
Badlop cbf06b4785 Fix to not send roster contact from oneself 2010-06-10 13:14:09 +02:00
Badlop cc7ecfb39e Support anonymous accounts in Shared Roster @all@ directive (EJAB-1264)
With this change, logged anonymous accounts are considered to be registered.
2010-06-10 12:22:27 +02:00
Badlop 04943ca469 Fix bug creating anonymous mnesia table 2010-06-10 12:17:31 +02:00
Badlop 89f99c4251 Fix Dialyzer errors in ejabberd_ctl 2010-06-10 00:52:51 +02:00
Badlop 1a6c162371 Fix Dialyzer errors in auth modules 2010-06-10 00:52:38 +02:00
Evgeniy Khramtsov ead2655a62 fixes some badmatches and calls to undefined functions (part of EJAB-1260) 2010-06-09 15:56:33 +10:00
Badlop 526912756b Fix warnings about unused variables 2010-06-08 21:29:53 +02:00
Badlop aa176917fa Fix typo in previous pubsub commit 2010-06-08 21:29:39 +02:00
Badlop be25c5ada7 Fix export to SQL 2010-06-08 21:16:41 +02:00
Badlop d2dee01f7c Don't delete offline messages in mnesia when exporting to PIEFXIS 2010-06-08 18:56:10 +02:00
Badlop b9e79aac6c Fix IQ records 2010-06-08 18:56:09 +02:00
Badlop 2e9f3d3308 Fix call to mod_offline 2010-06-08 18:56:08 +02:00
Badlop 39e18e3738 Fix JID conversion, useful for mod_offline update from 2.1.x to 3.0 2010-06-08 18:56:07 +02:00
Christophe Romain baef586581 fix unexported function calls 2010-06-08 15:57:36 +02:00
Badlop db17504c82 Don't hide the erlang node when using ejabberdctl debug 2010-06-07 22:40:11 +02:00
Badlop 85e59c14d2 New argument --erlargs to pass arguments to erl 2010-06-07 22:40:10 +02:00
Badlop d48b4f2438 Fix typo in update_list command (EJAB-1237) 2010-06-07 15:58:26 +02:00
Badlop 6925f388e7 Fix previous commit (EJAB-1257) 2010-06-07 13:48:20 +02:00
Badlop bc1b4163a2 New optional BOSH connection attribute process-delay (EJAB-1257) 2010-06-07 13:45:05 +02:00
Badlop 4e459b9466 Fix call to the proper API function 2010-06-03 12:29:44 +02:00
Badlop e3e888b8de Fix crash because JID is a 3-tuple 2010-06-03 12:19:52 +02:00
Badlop b1dfb4b5f2 Clarify in the Guide that mssql configuration is similar to odbc 2010-06-02 17:34:40 +02:00
Christophe Romain 2f372261d3 sync last changes in pubsub_odbc patch 2010-06-02 16:47:03 +02:00
Evgeniy Khramtsov 2187bccc38 consistent hashing support. WARNING: update exmpp before running this 2010-06-03 00:01:36 +10:00
Christophe Romain 6c0c30c032 final fix on created node notification (EJAB-1225) 2010-06-02 14:38:04 +02:00
Christophe Romain 166e742b3c can not use unexpected-request with 'cancel' type 2010-05-28 16:27:04 +02:00
Christophe Romain 76447a8810 fix error code when unsubscribing from a non-existent node (needs exmpp from e8f1096) (EJAB-1227) 2010-05-28 14:25:06 +02:00
Christophe Romain 0232f5958f send created node notifications (EJAB-1225) 2010-05-28 13:27:28 +02:00
Christophe Romain e042fdb111 fix cached_item issue with PEP 2010-05-28 13:17:36 +02:00
Christophe Romain 01855b4e32 make last_item_cache feature cluster aware (EJAB-1234) 2010-05-28 11:32:51 +02:00
Badlop 9275a0020e Handle error response from auth modules (thanks to Eric Liang) 2010-05-28 01:36:27 +02:00
Badlop fbc8466c3c Makefile with optional ejabberd_debug.erl compilation (EJAB-1242)
Only compile and install ejabberd_debug.erl when running:
 make ejabberd_debug=true
2010-05-28 00:48:29 +02:00
Badlop bd69e3ad6c Remove useless loop and clean prepare_response (thanks to Christopher tofu Zorn)
1. Remove the silly loop that isnt needed,
   this speeds up all requests by 100 milliseconds.

2. Clean up prepare response function and add two new functions to
   handle out going payloads based of whether its a new session or not.
2010-05-28 00:40:07 +02:00
Badlop 3b963c4f18 Add created_at column also to PostgreSQL schema (thanks to Mathias Ertl)(EJAB-1240) 2010-05-26 16:13:55 +02:00
Badlop 72b2209c3e Mix the commands update_all/0 and update_module/1 into update/1 (EJAB-1237) 2010-05-25 20:02:29 +02:00
Badlop 75c5803431 New ejabberd commands to update modified modules (EJAB-1237) 2010-05-24 13:56:52 +02:00
Badlop d03eacd160 Only log when script errors are found 2010-05-24 13:54:25 +02:00
Christopher tofu Zorn c13df5645e typo on exported function 2010-05-20 20:45:57 +02:00
Christopher tofu Zorn a76d3d46fc expose more functions so developers can implement prebinding methods 2010-05-20 20:32:56 +02:00
Badlop e5535c80da Document mod_multicast, and add module disabled to default config 2010-05-20 00:08:43 +02:00
Badlop 41484213fd Use multicast in C2S presence broadcast (EJAB-267) 2010-05-20 00:03:05 +02:00
Badlop a4cf03dbf0 Use multicast in MUC groupchat messages (EJAB-266) 2010-05-20 00:03:04 +02:00
Badlop 8935da5b5c Service for XEP-0033: Extended Stanza Addressing (EJAB-265) 2010-05-20 00:03:02 +02:00
Badlop 9c12790011 New ejabberd router for multicast packets (EJAB-329) 2010-05-20 00:03:00 +02:00
Christophe Romain bc963e7855 fix EJAB-1233 on pubsub_odbc patch 2010-05-19 11:03:20 +02:00
Christophe Romain 877a864ba3 remove useless binding 2010-05-19 10:43:07 +02:00
Christophe Romain 033bec01e3 prevent orphaned pubsub node (EJAB-1233) 2010-05-19 10:42:49 +02:00
Christophe Romain 5f89f481e4 fix hometree<->flat change 2010-05-18 17:29:09 +02:00
Christophe Romain 95057c1182 finish port to exmpp calls on jid transformation 2010-05-18 15:20:41 +02:00
Christophe Romain f6e4d95c6f PubSub: node_flat becomes default plugin (thanks to Karim Gemayel)(EJAB-1077) 2010-05-17 22:09:01 +02:00
Christophe Romain 4409c49494 fix create_node_permission using binary() instead of string() 2010-05-17 12:52:43 +02:00
Badlop f32b394a96 Fix English typos 2010-05-17 11:56:51 +02:00
Christophe Romain c09df6cf93 fix pubsub->pubsub_odbc patch 2010-05-17 11:11:33 +02:00
Christophe Romain 497911fc5d accept pubsub publish using normal message 2010-05-17 10:31:53 +02:00
Christophe Romain 46ac8f97eb Add pubsub#type node config (EJAB-1083) 2010-05-12 14:51:38 +02:00
Christophe Romain 0964724b2a sync pubsub_odbc with latest code 2010-05-12 13:54:21 +02:00
Christophe Romain ccc684b095 Enforce pubsub#show_values subscription option (EJAB-1096)(thanks to Karim Gemayel) 2010-05-12 13:46:34 +02:00
Christophe Romain 2f075b7b77 Add pubsub#notify_sub node option (EJAB-1230)(thanks to Karim Gemayel) 2010-05-12 12:01:54 +02:00
Christophe Romain e1dd9ed875 fix unsubscribing with SubID (thanks to Karim Gemayel) 2010-05-12 11:47:43 +02:00
Badlop e7d70933ac Show HTTP auth username and IP address in logs, not the password (EJAB-1231) 2010-05-12 10:28:01 +02:00
Badlop 611a9c0136 Fix EDoc errors 2010-05-11 13:15:33 +02:00
Badlop 834ca8a08d Show vCard size in WebAdmin, allow to delete it, allow to view the vCard 2010-05-11 01:22:20 +02:00
Badlop 34bc4da8d8 Fix vcard removal 2010-05-11 01:22:18 +02:00
Badlop 3727e2426d Catch error when auth crashes 2010-05-11 01:22:17 +02:00
Badlop 7aa5e8f435 Don't show HTTP request in logs, because reveals password (EJAB-1231) 2010-05-10 23:23:38 +02:00
Badlop 6129065cfa Show parsing error in debug log message 2010-05-10 22:45:24 +02:00
Badlop 86eebc21b4 More fixes in BOSH, it seems to work now 2010-05-10 22:44:55 +02:00
Badlop 56f5a7846f Fix binary conversion when removing user in mod_pubsub 2010-05-10 17:01:20 +02:00
Badlop bb4dae26da Optionally cache extauth users in mnesia (EJAB-641) 2010-05-10 16:43:39 +02:00
Badlop 2afce7822f Use a standard method to get a random seed (EJAB-1229) 2010-05-10 15:39:20 +02:00
Badlop e249a21f83 Fix warning 2010-05-10 15:10:24 +02:00
Badlop 2331e23f49 New option pam_userinfotype to provide username or JID (EJAB-652) 2010-05-10 15:08:21 +02:00
Badlop 110819525f Partially revert "Fix more HTTP-Bind", add proper fix: c2s works again, BOSH not yet 2010-05-10 13:56:58 +02:00
Evgeniy Khramtsov 3f6579ffbc new option ldap_tls_verify is added (EJAB-1229) 2010-05-10 19:57:40 +10:00
Evgeniy Khramtsov 92ec42565e full support for XEP-0115 v1.5 (EJAB-1223) (EJAB-1189) 2010-05-10 16:00:30 +10:00
Christopher tofu Zorn f84a1c88cf Change max inactivity from 30 to 120 seconds 2010-05-06 20:55:08 +02:00
Christopher tofu Zorn a1205f347f Use dirty_delete when removing the session.
There is no need for a transaction and has less overhead
2010-05-06 20:55:03 +02:00
Badlop 674ee7f5f6 Fix more HTTP-Bind; now works with exmpp bosh_client, but not others yet. 2010-05-05 19:59:57 +02:00
Badlop 4d1dfe8914 Indicate explicitly what nodes are handled by mod_configure 2010-05-04 11:40:35 +02:00
Christophe Romain dc4d72cf77 Let PubSub check the namespace of the published root payload element 2010-05-03 14:35:49 +02:00
Badlop 57ffba34c2 New page Miscelanea Options 2010-05-03 13:59:18 +02:00
Christophe Romain 2f97ef8b81 Enforce pubsub#presence_based_delivery (EJAB-1221) (thanks to Karim Gemayel)
this commit also sync pubsub_odbc back to latest pubsub
2010-04-29 12:54:35 +02:00
Emilio Bustos 4548f2faf0 Fixed Bugs handling Service Discovery to contacts (EJAB-1207) 2010-04-29 00:38:25 -03:00
Badlop f01dd3e942 Fix Edoc comment 2010-04-28 20:15:15 +02:00
Badlop 53a5b602dc New Access rule webadmin_view for read-only (thanks to Oleg Palij)(EJAB-213) 2010-04-27 23:27:24 +02:00
Christophe Romain b49dd8b8c4 fix node path format, must be binary() 2010-04-27 19:08:56 +02:00
Badlop 4c147c5f29 Don't store blocked messages in offline queue (thanks to Brian Acton)(EJAB-1224) 2010-04-27 13:29:05 +02:00
Badlop 9820880cd5 Automatic vcard avatar addition in presence (thanks to Igor Goryachev)(EJAB-208) 2010-04-27 12:33:38 +02:00
Badlop 8713465df1 No need to handle IQ requests other than Get and Set 2010-04-22 20:15:45 +02:00
Badlop cb9b97411b Rename mod_muc_log option spam_prevention to link_nofollow (EJAB-1141) 2010-04-21 18:58:03 +02:00
Badlop 069ad5332d Update WebAdmin logo to ejabberd 3. 2010-04-21 15:50:01 +02:00
Badlop 1d7daab4e8 Don't send error stanza as reply to error stanza (EJAB-930) 2010-04-20 20:31:17 +02:00
Badlop 6cdfec1284 Fix support for registration from C2S connections 2010-04-19 16:08:01 +02:00
Badlop ab77bb5466 Recompile the Guide 2010-04-19 15:20:45 +02:00
Evgeniy Khramtsov c8f5585f3b added notes about LDAP password change 2010-04-19 23:10:22 +10:00
Evgeniy Khramtsov e117ce1b7b allow inband password change (EJAB-199) 2010-04-19 21:05:19 +10:00
Badlop b0d5ac0b33 Minor fixes in listeners options list 2010-04-19 11:57:16 +02:00
Evgeniy Khramtsov 5bb22101e2 LDAP extensible match support (EJAB-722) 2010-04-19 14:14:26 +10:00
Badlop f70ebd6983 Allow definition of local address for outgoing s2s (EJAB-418) 2010-04-15 01:04:40 +02:00
Badlop 5cb10cf9fa Fix outgoing s2s 2010-04-14 21:08:24 +02:00
Badlop 3259c1c2ea Update some HTTP-Bind to work with exmpp; but doesn't work yet. 2010-04-14 16:50:32 +02:00
Badlop 58a4b594db Update calls of old xml_stream and xml, to exmpp. 2010-04-14 16:45:37 +02:00
Badlop 7471d49b5a Fix roster display in WebAdmin 2010-04-14 16:42:29 +02:00
Badlop 67cced15b9 Fix calls to register_feature 2010-04-14 01:08:22 +02:00
Badlop 7fffae5b1a Rename some JEP references to XEP 2010-04-14 01:00:14 +02:00
Badlop bda56552eb Fix management of disco_features and disco_extra_domains 2010-04-14 00:57:56 +02:00
Badlop d2104ba4e1 Reduce verbosity of log when captcha_cmd is checked but not configured. 2010-04-12 13:33:13 +02:00
Pablo Polvorin 3581b137e1 Remove warning for undefined print_state/1 function for p1_fsm processes.
Include a identity function as implementation of print_state/1.
2010-04-09 14:18:44 -03:00
Christophe Romain 44abf1ff28 fix subscriptions, subscribe, and configure options (thanks to Karim Gemayel) 2010-04-08 13:58:47 +02:00
Badlop 7814527e0d Bugfix for starting with a clean caps table (thanks to Karim Gemayel) 2010-04-07 12:50:47 +02:00
Badlop 57d5bc693c Add xml default content type (thanks to Aaron Winborn)(EJAB-14214) 2010-04-06 23:04:28 +02:00
Emilio Bustos b85b63018d Move SQL queries from vcard_odbc to odbc_queries. 2010-03-31 16:33:18 -03:00
Pablo Polvorin fd990cf4d8 Allow customizing the StateData in p1_fsm before error reporting.
A new callback is introduced on the p1_fsm behaviour:

print_error/1

If the module implements this function, it will be invoked
in case of process crash with the current state data *before*
printing the error in the log. The function must return the
desired State to print.

It is used in ejabberd_c2s to prune the presence sets that
can be large. Instead, the state is changed to include only
the # of elements on each set.

Change inspired in comming changes to gen_server on OTP, and
http://github.com/erlyvideo/erlyvideo/commit/b01d15abc3189226dbf824db19db22da35fa33a0#diff-0
2010-03-30 16:44:39 -03:00
Badlop da50d95873 Refactor code to reduce calls to get_affiliation and get_role (thanks to Steam)(EJAB-1038) 2010-03-29 20:49:22 +02:00
Christophe Romain 2f899ba76f purge_offline and get/set affiliation bugfix 2010-03-22 20:27:13 +01:00
Evgeniy Khramtsov d11a715eda - pass jid into feature_check_packet hook;
- bounce messages when closing c2s session;
- implemented treap:to_list/1 and treap:from_list/1
2010-03-17 23:47:13 +09:00
Mickael Remond 6d9094ceca Move HTTP session timeout log from warning level to info. Timeout can be generated when user close the browser for example. 2010-03-14 10:30:01 +01:00
Christophe Romain d50fc6728e improve remove_user (EJAB-1172) 2010-03-11 16:07:56 +01:00
Peter Lemenkov c316bfae25 More compliance with LSB
The init-script shall return 4 in case then user doesn't have sufficient privileges for action.
See http://refspecs.freestandards.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
2010-03-08 22:41:14 +01:00
Christophe Romain 37a23e69d7 allows PEP to send to bare jid on s2s 2010-03-08 15:35:19 +01:00
Badlop 13412129ec Document mod_sic (EJAB-1205) 2010-03-08 13:59:06 +01:00
Badlop 94257c3e4b Implement XEP-0279: Server IP Check (thanks to Karim Gemayel)(EJAB-1205) 2010-03-08 13:58:53 +01:00
Badlop 4dc48da638 Replace concat_binary supported until R14 with list_to_binary supported since R9 2010-03-08 12:53:37 +01:00
Badlop 002104c62e Catch errors when exporting to PIEFXIS file (EJAB-1178) 2010-03-08 11:16:33 +01:00
Badlop 3844883321 Recompile the Guide 2010-03-08 11:16:05 +01:00
Evgeniy Khramtsov fb64d79379 ldap_dn_filter option is documented; now fetching only needed attributes in LDAP search requests (EJAB-1204) 2010-03-08 16:51:24 +09:00
Evgeniy Khramtsov 9d2fd3e52c now using "%u" pattern as default for ldap_uids (EJAB-1203) 2010-03-08 14:08:22 +09:00
Christophe Romain 7d497615a1 add extended stanza addressing 'replyto' on PEP (EJAB-1198) (thanks karim) 2010-03-05 18:33:12 +01:00
Christophe Romain fe40651b0d add pubsub#purge_offline (EJAB-1186) (thanks karim) 2010-03-05 16:09:06 +01:00
Christophe Romain 3c36cd64e3 fix pubsub#title option (EJAB-1190) (thanks karim) 2010-03-05 15:45:31 +01:00
Christophe Romain 7d97830ad7 mod_caps optimizations (thanks evgeniy) 2010-03-05 15:38:44 +01:00
Denis Kurochkin a1fe809197 MSSQL support was broken (EJAB-1201) 2010-03-05 14:46:17 +01:00
Christophe Romain 236423d058 fix: subscribe, unsubscribe, last published item (thanks karim) 2010-03-05 13:50:51 +01:00
Evgeniy Khramtsov c8c7169465 improved s2s connections clean up (EJAB-1202) 2010-03-04 12:43:43 +09:00
Badlop 64f8cf8a9e Clarify in Displayed Groups label that it expects IDs. 2010-03-01 11:44:02 +01:00
Badlop c99de764bc Add quotes in documentation of some erl arguments (thanks to Vincent Courcelle)(EJAB-1191) 2010-02-25 00:06:13 +01:00
Badlop c9463e3308 Fix resending authorization problem 2010-02-24 13:14:53 +01:00
Badlop 87beae3298 Run user_receive_packet also when sending offline messages to client (thanks to Brian Acton)(EJAB-1193) 2010-02-22 22:56:57 +01:00
Badlop 3e6acdfb4a Fix typos in example config comments (thanks to Florian Zumbiehl)(EJAB-1192) 2010-02-22 13:40:19 +01:00
Badlop ebc82f2968 Use alternative of file:read_line/1 to not require R13B02 2010-02-20 19:31:57 +01:00
Evgeniy Khramtsov 9890cc89b6 get rid of queue:filter/2 to keep compatibility with older Erlang versions 2010-02-20 20:14:34 +09:00
Evgeniy Khramtsov 62ad40b1e4 now using mnesia:async_dirty when cleaning table from failed node 2010-02-19 16:41:13 +09:00
Badlop ca1ac76108 Reduce verbosity of HTTP Binding log messages (thanks to Alexey Shchepin) 2010-02-19 00:08:04 +01:00
Badlop ceb377621e Recompile guide.html 2010-02-18 22:25:36 +01:00
ekhramtsov d70e92d781 improved explanation of "max_fsm_queue" option; included this option in ejabberd.cfg.example 2010-02-18 15:42:59 +09:00
ekhramtsov c0a0bae91e option "access_from" is now documented (EJAB-1187) 2010-02-18 15:00:40 +09:00
ekhramtsov e7c93ae68d new option "hostname" is added (thanks to Stefan Hepp) (EJAB-838) 2010-02-17 23:58:53 +09:00
Badlop 55986739c9 Update namespaces to match exmpp_nss.hrl (thanks to Karim Gemayel)(EJAB-1179)
This requires a recent exmpp from Git. Once released, it'll require exmpp 0.9.3
2010-02-16 17:33:53 +01:00
Badlop 8539a7d7ea Close also legacy sessions that were half connected (thanks to Evgeniy Khramtsov)(EJAB-1165) 2010-02-16 12:44:43 +01:00
Badlop 23d008cd79 Remove references to the old SVN repository. 2010-02-16 12:00:05 +01:00
Badlop 5a82e3ac70 Rewrite mnesia counter functions to use dirty_update_counter (EJAB-1177)
(thanks to Juan Pablo Carlino and Alexey Shchepin)
2010-02-15 23:38:08 +01:00
Badlop 4117a5e856 New command to set master Mnesia node 2010-02-15 23:25:02 +01:00
Badlop 6cf078ae83 Shared roster gets contact nickname from vcard, when available (EJAB-114) 2010-02-15 22:47:38 +01:00
Badlop 27be3b400e Cross-domain HTTP-Bind support (thanks to Jack Moffitt)(EJAB-1168) 2010-02-15 22:39:32 +01:00
Badlop fa4ebab036 Fix cluster race condition in route read (thanks to Alexey Shchepin) 2010-02-15 18:37:42 +01:00
Badlop df2878739c Improve TTY code to work on more operating systems (thanks to Jan Koum) 2010-02-12 22:11:22 +01:00
Badlop cab98b3fd5 Added support for Jot in ctl and TTY in debug (thanks to Jan Koum) 2010-02-12 20:52:31 +01:00
Badlop 60ffcd78f1 Minor fixes in the new ejabberdctl flock code 2010-02-12 20:25:20 +01:00
Martin Langhoff 6557136426 ejabberdctl: support concurrent connections with bound conn names
If flock is available, ejabberdctl will use it to grab one
of a bound number of connection names. This allows concurrent
connections while using a bound number of atoms.

Using PID, timestamps or random strings for transient connection IDs
(which would avoid the need for flock) uses an unbound number of atoms.
This can effectively DoS servers, as these connection names are
not garbage collected.
2010-02-12 20:24:58 +01:00
Badlop 50b0ef4db9 Replace mention of ejabberd SVN with Git. 2010-02-11 13:24:39 +01:00
Badlop 18074abfdd Remove unnecessary section about Snow Leopard with Erlang R13B 2010-02-11 13:23:41 +01:00
Badlop d429ba812c Fix bashism in 'ejabberdctl started' 2010-02-11 11:04:15 +01:00
Badlop 0d09816c39 Allow a request_handler to serve a file in root of HTTP 2010-02-10 20:17:37 +01:00
Badlop 4caf4da9a6 Add Edoc comment about run_fold/4 function 2010-02-08 21:27:10 +01:00
Badlop 961640bd2c Fix to get shared roster displayed when user logins 2010-02-08 21:14:40 +01:00
Badlop 5d92dce21d Update spec of node_hometree get_states (thanks to Magnus Henoch) 2010-02-08 17:54:11 +01:00
Badlop 50f5356c89 Another migration of regexp call to re (EJAB-921) 2010-02-08 13:42:05 +01:00
Badlop 3156cdf10e Fix character in README file, in master, too. 2010-02-08 12:38:52 +01:00
Badlop 7a5ec47b58 Copied release notes from previous 2.1.* releases
SVN Revision: 2962
2010-02-05 13:34:09 +01:00
Pablo Polvorin b22e8b706a Add new debuging hook to the http receiving process.
The new hook is called http_request_debug, and receive the  LocalPath and Request as parameter.

SVN Revision: 2961
2010-02-05 13:34:09 +01:00
Pablo Polvorin 0ddf0d10a5 Hibernate http-bind process after handling a request.
When using BOSH, this reduces memory consuption of the http-bind process, with negligible CPU impact.

SVN Revision: 2960
2010-02-05 13:34:09 +01:00
Pablo Polvorin 0ed8ae5975 Bug Fix: The value of max # of erlang process specified in ejabberdctl.cfg was not used.
It was called PROCESSES in the .cfg file,  and ERL_PROCESSES in the script.  The latter is the correct,  to be coherent with ERL_MAX_PORTS and ERL_MAX_ETS_TABLES.

SVN Revision: 2959
2010-02-05 13:34:09 +01:00
Evgeniy Khramtsov 1283a59465 Added new acl for mod_register: access_from. This acl is applied if existing account tries to register a new account (either via s2s or c2s). The default action is to deny such operations.
SVN Revision: 2958
2010-02-03 12:20:04 +00:00
Evgeniy Khramtsov ad1aec6cd1 avoid resending <stream:error> stanzas on terminate (EJAB-1180)
SVN Revision: 2957
2010-02-03 12:10:08 +00:00
Evgeniy Khramtsov 7d7177a6af changed Reason to shutdown when stopping destroyed MUC room
SVN Revision: 2956
2010-02-03 11:50:37 +00:00
Badlop f5e6c9a2a3 Fix bug handling Reason in gen_fsm:terminate
SVN Revision: 2951
2010-02-02 11:15:44 +00:00
Evgeniy Khramtsov 7cd5a04087 improved SQL reconnect behaviour
SVN Revision: 2948
2010-01-31 11:48:21 +00:00
Christophe Romain bfff7d721d remove useless empty dir
SVN Revision: 2946
2010-01-28 16:04:58 +00:00
Evgeniy Khramtsov aaff63da58 regenerated guide.html
SVN Revision: 2944
2010-01-28 15:37:02 +00:00
Evgeniy Khramtsov 95a3cc88cd fixes badly formed define
SVN Revision: 2943
2010-01-28 15:34:00 +00:00
Evgeniy Khramtsov 70c1a3f60b ejabberd_c2s option "max_fsm_queue" is now documented
SVN Revision: 2942
2010-01-28 14:01:31 +00:00
Evgeniy Khramtsov c24af4ca63 new ejabberd_c2s option support: max_fsm_queue
SVN Revision: 2940
2010-01-28 13:46:44 +00:00
Evgeniy Khramtsov e31b2582b6 now using p1_fsm behaviour in c2s FSM (EJAB-1173)
SVN Revision: 2937
2010-01-28 13:11:14 +00:00
Badlop 479e5cb107 Fix disco of bare JID
SVN Revision: 2935
2010-01-27 18:54:03 +00:00
Badlop 887a65aa18 exmpp in pubsub doc and retrocompatibility comments (thanks to Karim Gemayel)
SVN Revision: 2934
2010-01-27 18:53:56 +00:00
Badlop e4a6d20328 exmpp fixes in captcha (thanks to Karim Gemayel)
SVN Revision: 2933
2010-01-27 18:53:47 +00:00
Badlop f5e1479afe exmpp fixes in receiver (thanks to Karim Gemayel)
SVN Revision: 2932
2010-01-27 18:53:43 +00:00
Badlop a10493976e exmpp fixes in mod_muc (thanks to Karim Gemayel)
SVN Revision: 2931
2010-01-27 18:53:38 +00:00
Badlop 4caac4a322 exmpp fixes in c2s, piefxis and mod_vcard_ldap (thanks to Karim Gemayel)
SVN Revision: 2930
2010-01-27 18:53:33 +00:00
Badlop e98df7acb1 exmpp fixes in http_bind (thanks to Karim Gemayel)
SVN Revision: 2929
2010-01-27 18:53:27 +00:00
Mickaël Rémond f20d2bb2ff Fix typo in doc
SVN Revision: 2927
2010-01-26 13:14:19 +00:00
Badlop a5e4f34dbb Fix documentation installation, no need for executable permission (thanks to Peter)(EJAB-1170)
SVN Revision: 2923
2010-01-25 18:27:24 +00:00
Badlop 1c9760f6d2 Fix typo in EJABBERD_BIN_PATH (thanks to Martin Langhoff)(EJAB-891)
SVN Revision: 2922
2010-01-25 18:24:59 +00:00
Badlop 2b1ea7d85b Ignore in SVN also epam binary, and Makefile of pam and odbc subdirectories.
SVN Revision: 2921
2010-01-22 18:55:39 +00:00
Badlop 1677603e59 Ignore in SVN the file stun/Makefile
SVN Revision: 2920
2010-01-22 14:22:50 +00:00
Badlop a95286d511 Recompile the configure script and the Guide.
SVN Revision: 2919
2010-01-22 11:30:31 +00:00
Badlop 6e18e292f3 Degrade trunk to prealpha, and show a warning in configure script.
SVN Revision: 2918
2010-01-22 11:27:32 +00:00
Badlop 114dd4d9e7 Support in ejabberdctl help command names with old - characters.
SVN Revision: 2917
2010-01-20 10:32:56 +00:00
Badlop 0495112aab Close sessions that were half connected (thanks to Alexey Shchepin)(EJAB-1165)
SVN Revision: 2912
2010-01-17 19:29:35 +00:00
Badlop f3483529a7 Fix some moved URLs in the Guide
SVN Revision: 2910
2010-01-16 14:35:23 +00:00
Badlop ffc4f3dc48 Document the option route_subdomains in the Guide (EJAB-1164)
SVN Revision: 2909
2010-01-16 14:35:19 +00:00
Badlop a9fba750fa Improve functions calls when closing client connection.
SVN Revision: 2905
2010-01-15 12:02:15 +00:00
Christophe Romain 13220d44f4 improve delete_subscriptions code
SVN Revision: 2903
2010-01-14 12:56:40 +00:00
Christophe Romain 0c9e0168d5 fix binary conversion of ServerHost in presence/2
SVN Revision: 2901
2010-01-13 14:53:05 +00:00
Christophe Romain db4fe25274 add send_loop robustness
SVN Revision: 2900
2010-01-13 10:25:06 +00:00
Badlop e948aafeca If big offline message queue, show only subset on WebAdmin (EJAB-1095)
SVN Revision: 2898
2010-01-13 00:00:34 +00:00
Badlop 4639c0faf0 Fix explanation of access_max_user_messages.
SVN Revision: 2897
2010-01-13 00:00:11 +00:00
Badlop 82cd0adb79 Check for Effective GID EGID in ejabberdctl (thanks to Rustam Aliyev)(EJAB-1160)
SVN Revision: 2894
2010-01-12 18:13:30 +00:00
Badlop 1bcd481fdc Update year of ProcessOne copyright from 2009 to 2010 (EJAB-1159)
SVN Revision: 2892
2010-01-12 16:15:16 +00:00
Badlop 768ea20a3a Require exmpp 0.9.2
SVN Revision: 2890
2010-01-12 15:55:31 +00:00
Christophe Romain bb1ab19997 avoid calling gen_server on internal events (EJAB-1156)
SVN Revision: 2887
2010-01-12 15:14:57 +00:00
Christophe Romain dd159242e3 allow unsubscribe with 'all' SubId, as mod_pubsub already does
SVN Revision: 2885
2010-01-12 14:42:23 +00:00
Christophe Romain f8886ee36c fix NodeName issue from r2880 (thanks to Karim Gemayel)
SVN Revision: 2883
2010-01-12 13:30:49 +00:00
Christophe Romain 67af2908f9 fix headers (EJAB-1091), (EJAB-1092), (EJAB-1093) (thanks to Karim Gemayel)
SVN Revision: 2881
2010-01-12 12:34:02 +00:00
Badlop 9df6e1fe0a Support in user list page of WebAdmin when mod_offline is disabled (EJAB-377)
SVN Revision: 2878
2010-01-12 12:06:43 +00:00
Badlop a658348ac1 Show and throw error when captcha_cmd is required but not configured.
SVN Revision: 2875
2010-01-11 22:22:04 +00:00
Badlop 75ca3d8975 Minor case code simplification.
SVN Revision: 2873
2010-01-09 18:39:17 +00:00
Mickaël Rémond b431a9099e jlib:make_jid/3 does not exist anymore. I think I replaced it correctly by exmpp_jid:make/3
SVN Revision: 2872
2010-01-09 16:44:33 +00:00
Mickaël Rémond 7ed6614ad4 Added a comment to improve code as suggested by Dialyzer.
SVN Revision: 2871
2010-01-09 16:38:07 +00:00
Mickaël Rémond 4fba4db32f Match Erlang typing documentation, to remove dialyzer warning. Code was working fine however.
SVN Revision: 2870
2010-01-09 16:31:45 +00:00
Mickaël Rémond a0554183c5 Attempt to fix dialyzer warning: adhoc.erl:51: Guard test XData::'false' | #xmlel{ns::'jabber:x:data',declared_ns::[{_,_}],attrs::[{_,_,_,_}],children::'undefined' | [{_,_} | {_,_,_,_,_,_}]} =:= 'true' can never succeed
SVN Revision: 2869
2010-01-09 16:18:59 +00:00
Mickaël Rémond b1ad7ad0ba Fix typo in comment.
SVN Revision: 2868
2010-01-09 15:19:48 +00:00
Mickaël Rémond 0537eea929 Small refactoring
SVN Revision: 2867
2010-01-09 15:15:46 +00:00
Badlop cfc9089e51 An AccessCommand with Access 'all', don't require auth to execute it.
SVN Revision: 2866
2010-01-09 00:48:03 +00:00
Badlop bb926f8f87 Remove doc/api directory because its content is now in doc/devdoc.
SVN Revision: 2864
2010-01-07 20:13:03 +00:00
Badlop c2f242b4a6 Fix so script runs correctly when invoked by root (EJAB-1152)
SVN Revision: 2863
2010-01-05 20:31:19 +00:00
Badlop 3f1c8f98ed Show the last activity time in the user page.
SVN Revision: 2861
2010-01-04 20:39:01 +00:00
Badlop 7a3ce2e81a Command to stop ejabberd informing users, with grace period, and kindly (EJAB-1112)
SVN Revision: 2860
2010-01-04 20:35:47 +00:00
Badlop 8c0cc95a55 When ejabberd stops, send stream close to clients (thanks to Alexey Shchepin)(EJAB-1112)
SVN Revision: 2859
2010-01-04 20:32:44 +00:00
Badlop 38dfef923c Improve parsing of ejabberd_sm:get_user_info result.
SVN Revision: 2858
2010-01-04 19:03:36 +00:00
Christophe Romain 89bceb959a add explicit comment on last published items configuration (EJAB-1130)
SVN Revision: 2856
2010-01-04 11:50:08 +00:00
Badlop 8deb2b57af Improve log message when showing lines of config file.
SVN Revision: 2851
2009-12-30 01:39:02 +00:00
Badlop 60915a7f21 Kick occupants with reason when room is stopped due to MUC shutdown (EJAB-1149)
SVN Revision: 2849
2009-12-30 01:29:02 +00:00
Badlop 69869f0446 Fix warning about unused variable
SVN Revision: 2847
2009-12-29 23:13:15 +00:00
Badlop 1eb2b1f047 If problem in config file starting ejabberd: display config lines and stop node (EJAB-1148)
SVN Revision: 2845
2009-12-29 22:49:16 +00:00
Badlop a89b400c04 Add +export_all to EFLAGS if: make debug=true (thanks to Marcin Owsiany)(EJAB-1134)
SVN Revision: 2843
2009-12-29 19:15:59 +00:00
Badlop 6f3aeead07 Support also SASL PLAIN auth messages described in RFC4616 (EJAB-1132)
SVN Revision: 2841
2009-12-29 18:45:02 +00:00
Badlop 3da20486c1 Disable code of recent commit because some clients can't handle it (EJAB-1058)
SVN Revision: 2840
2009-12-29 18:44:48 +00:00
Badlop d911cd1124 Write in room log when a room is created, destroyed, started, stopped (EJAB-1144)
SVN Revision: 2837
2009-12-29 14:44:12 +00:00
Badlop a7bd529dac Send features after negotiating binding and session (EJAB-1058)
SVN Revision: 2835
2009-12-28 20:10:18 +00:00
Badlop 857c87499a Fix bug of unbound variable Attrs in the previous commit.
SVN Revision: 2833
2009-12-28 18:47:14 +00:00
Badlop 381dff1afc Provide more detailed log message when s2s stream start fails.
SVN Revision: 2832
2009-12-28 15:31:18 +00:00
Badlop 378a6b2ff2 Better use install_fallback when importing a Mnesia backup file.
SVN Revision: 2830
2009-12-28 12:44:07 +00:00
Badlop 5b782ad5a1 Support for arguments in ejabberdctl that are empty strings.
SVN Revision: 2828
2009-12-28 11:46:22 +00:00
Badlop 93ed18c2e2 Add explanation about global Access precendence over vhost Access (EJAB-803)
SVN Revision: 2826
2009-12-23 16:09:47 +00:00
Badlop 95e96cc346 Fix error message when register is forbidden by ACL (EJAB-803)
SVN Revision: 2825
2009-12-23 16:09:33 +00:00
Badlop 0e2cd7a8d0 Clarify that 'tls' option is still useful in ejabberd_http for HTTPS.
SVN Revision: 2820
2009-12-23 09:05:02 +00:00
Badlop 332b474a9e Remove the old note about LDAP lack of encryption.
SVN Revision: 2818
2009-12-21 16:11:18 +00:00
Badlop 7434234c27 pep_mapping not working due to Node type mismatch (EJAB-1135)
SVN Revision: 2816
2009-12-21 15:20:27 +00:00
Badlop 848e72bcab Fix EDoc comment
SVN Revision: 2813
2009-12-21 14:31:10 +00:00
Badlop eb26edf5f5 Fix get_group_opt to return Default value in case of Mnesia error.
SVN Revision: 2812
2009-12-19 00:19:26 +00:00
Badlop 440299656f Print command's reply and newline only when there's something to print.
SVN Revision: 2807
2009-12-11 20:08:06 +00:00
Badlop 4ac69edfe7 Added to ejabberdctl an experimental variable EJABBERD_BYPASS_WARNINGS
SVN Revision: 2805
2009-12-11 19:43:57 +00:00
Badlop 9ccdcfc849 Add support for serving a Unique Room Name (thanks to Pablo Polvorin)(EJAB-1121)
SVN Revision: 2803
2009-12-11 12:32:40 +00:00
Badlop 514d5aab14 Show Last Activity menu item in Webadmin only if vhost has mod_last (EJAB-1031)
SVN Revision: 2801
2009-12-09 17:48:03 +00:00
Badlop 2a09bdad13 Call in WebAdmin the proper mod_last backend module (EJAB-1031)
SVN Revision: 2800
2009-12-09 17:47:50 +00:00
Badlop dfa966a576 Fix erl -setcookie argument in cluster setup (thanks to Jan Koum)
SVN Revision: 2797
2009-12-09 10:09:57 +00:00
Pablo Polvorin 573ff2564b Remove usage of #jid record introduced in 2787.
Replace explicit references to #jid with exmpp_jid API calls.

SVN Revision: 2794
2009-12-08 18:59:00 +00:00
Badlop 929022bc0f Apply a forgotten part of the original patch (EJAB-1119)
SVN Revision: 2793
2009-12-08 17:33:30 +00:00
Badlop 21a36819b0 Fix memory and port leak when TLS is enabled in HTTP (thanks to Brian Cully)(EJAB-1119)
SVN Revision: 2791
2009-12-07 17:34:52 +00:00
Badlop efd99f5b28 Add notices about MIT license and copyright to escobar_hiliter.erl
SVN Revision: 2788
2009-12-07 15:50:08 +00:00
Christophe Romain 913684e5a5 prevent sending duplicated last items if several resources online (EJAB-1116)
SVN Revision: 2787
2009-12-06 23:21:03 +00:00
Badlop 40e06b55c0 Typo in mod_pubsub_odbc breaks Service Discovery and more (EJAB-1115)
SVN Revision: 2785
2009-12-04 18:36:07 +00:00
Badlop 182f4b008b Call ejabberd_router:route/3 instead of sending a message (EJAB-1114)
SVN Revision: 2783
2009-12-04 16:32:20 +00:00
Badlop c3df4f3eb0 Small relax the limitation in the mod_pubsub_odbc host option.
SVN Revision: 2780
2009-12-04 16:07:43 +00:00
Badlop 2c1b8b0930 Merge from 2.1.x 2498: added mod_pubsub_odbc documentation
SVN Revision: 2779
2009-12-03 22:58:49 +00:00
Badlop 3cca748bd5 Explain limitation in the mod_pubsub_odbc host option.
SVN Revision: 2778
2009-12-03 22:58:30 +00:00
Badlop 2a05ca5f2b Use os:getenv to get HOME; if variable is undefined use default values.
SVN Revision: 2772
2009-12-03 15:58:19 +00:00
Badlop 3173d9167f Forward IQ vCard queries of room occupants to bare JID, not full (EJAB-1045)
SVN Revision: 2770
2009-12-01 20:02:16 +00:00
Badlop f7b5afec51 Don't handle internally an IQ vCard if destination is full JID (EJAB-1045)
SVN Revision: 2769
2009-12-01 20:02:00 +00:00
Badlop bc355eebaa Fix call to get_module_proc with binary.
SVN Revision: 2765
2009-11-30 13:08:37 +00:00
Badlop 78f9586839 Fix call to hook management in mod_caps start/stop
SVN Revision: 2764
2009-11-30 12:55:35 +00:00
Badlop 040892d1a2 Remove all references to unused library: expat (EJAB-1111)
SVN Revision: 2763
2009-11-30 12:32:14 +00:00
Badlop 71cd4917d8 Move get_group_name outside the loop (thanks to mikekaganski)
SVN Revision: 2761
2009-11-26 14:45:39 +00:00
Badlop b989297725 Fix problem of authentication when using plain from SVN r2575 (EJAB-936)
SVN Revision: 2759
2009-11-24 21:40:50 +00:00
Badlop cf6d842d45 Fix warning
SVN Revision: 2758
2009-11-24 15:22:06 +00:00
Badlop 733e84a4a8 Fix exmpp_stanza:get_sender return value.
SVN Revision: 2757
2009-11-24 11:56:26 +00:00
Badlop 9ac9a84ca7 Fix explanation of option content_types. Reorder options.
SVN Revision: 2756
2009-11-23 20:28:53 +00:00
Badlop 4f369d048d Generate main XML file also when exporting only a vhost (EJAB-1098)
SVN Revision: 2754
2009-11-23 18:35:11 +00:00
Badlop c1a7e30f12 Show informative webpage when browsing the HTTP-Poll page (EJAB-1106)
SVN Revision: 2752
2009-11-23 15:22:45 +00:00
Badlop 4dcfde7737 Change captcha.sh to not depend on bash (thanks to Konstantin Khomoutov)(EJAB-1105)
SVN Revision: 2750
2009-11-23 12:43:56 +00:00
Badlop 0838514c27 Option to define custom HTTP headers in mod_http_fileserver (EJAB-612)
SVN Revision: 2748
2009-11-23 12:13:26 +00:00
Badlop 29f3ef4716 Explain that the example captcha.sh requires Bash because uses RANDOM feature.
SVN Revision: 2746
2009-11-17 15:49:54 +00:00
Badlop a8e5437271 Include IP address, time and module in IBR admin message (thanks to Tsukasa Hamano)
SVN Revision: 2743
2009-11-17 11:14:00 +00:00
Badlop a363d988a7 The default value of option ldap_filter is: undefined.
SVN Revision: 2742
2009-11-13 20:17:54 +00:00
Badlop e1968b6b52 Copied Release Notes from 2.1.0 tag
SVN Revision: 2740
2009-11-13 20:07:03 +00:00
Evgeniy Khramtsov 99a6f12026 fixes allow_host/2 on subdomains. added hook s2s_allow_host: the hook should return deny or allow
SVN Revision: 2739
2009-11-13 16:22:54 +00:00
Badlop eca650efac Fix bug that forgot listener options when using R12 or older.
SVN Revision: 2736
2009-11-06 18:33:37 +00:00
Christophe Romain bde4b7b057 minor bug fixes related to the use/conversion of/to exmpp (thanks to Karim Gemayel)
SVN Revision: 2733
2009-11-06 14:36:41 +00:00
Christophe Romain a1e9b55ead minor bug fixes related to the use/conversion of/to exmpp (thanks to Karim Gemayel)
SVN Revision: 2732
2009-11-06 14:34:23 +00:00
Christophe Romain 1c4cc57e3f fix root node deletion match
SVN Revision: 2730
2009-11-05 17:36:54 +00:00
Badlop 26cd3a78d2 Fix ProcessOne name in comments.
SVN Revision: 2728
2009-11-04 20:19:38 +00:00
Badlop 3ed3c94a15 Extend explanation of ldap_encrypt tls (thanks to Konstantin Khomoutov)
SVN Revision: 2727
2009-11-04 20:18:23 +00:00
Badlop ff338a0a62 Fix disco on root node, add commands to disco (thanks to Brian Cully)(EJAB-1094)
SVN Revision: 2726
2009-11-04 20:17:08 +00:00
Badlop 5138a9709e Send authorization messages outside of get-pending transaction (thanks to Brian Cully)(EJAB-1090)
SVN Revision: 2725
2009-11-04 20:16:05 +00:00
Badlop ae93cf2c28 Send authorization messages outside of get-pending transaction (thanks to Brian Cully)(EJAB-1090)
SVN Revision: 2720
2009-11-04 17:40:39 +00:00
Badlop 1c2d639179 Fix small typo (thanks to MiCHi)
SVN Revision: 2716
2009-10-29 12:41:51 +00:00
Christophe Romain 2078f9ae95 typo fix on mod_pubsub and improve ejabberd_sm:get_session_pid api
SVN Revision: 2715
2009-10-27 14:40:01 +00:00
Christophe Romain 1fea1e3f4e minor bugfix, thanks to brian Cully (EJAB-1089)
SVN Revision: 2714
2009-10-27 14:30:00 +00:00
Christophe Romain b2bd51d3e3 fix disco bugs, thanks to Brian Cully (EJAB-1088)
SVN Revision: 2712
2009-10-27 14:24:33 +00:00
Badlop 80a7f5123d Update ejabberd-p1 logo
SVN Revision: 2709
2009-10-26 18:30:53 +00:00
Badlop 8746175f1d Better detection of ejabberd modules. Support down to Graphviz 2.8. Fix APP colours.
SVN Revision: 2708
2009-10-26 18:30:38 +00:00
Badlop 236d8fa254 Update overview.edoc
SVN Revision: 2706
2009-10-23 15:14:39 +00:00
Badlop 3872907f38 Fix EDoc errors
SVN Revision: 2705
2009-10-23 15:14:25 +00:00
Badlop 98f79f0c47 Add devdoc support to Makefiles
SVN Revision: 2704
2009-10-23 15:14:08 +00:00
Badlop 795992fb30 Update stylesheet
SVN Revision: 2703
2009-10-23 15:13:48 +00:00
Badlop 96504ffd88 Add images for ejabberd devdoc.
SVN Revision: 2702
2009-10-23 15:13:28 +00:00
Badlop 5e7b217d6c Add funrelg: draw a function relation graph from source code using Graphviz.
SVN Revision: 2701
2009-10-23 15:13:11 +00:00
Badlop f07513c74b Add escobar_run, a small frontend to call escobar_hilite.
SVN Revision: 2700
2009-10-23 15:12:48 +00:00
Badlop 22fffb32ca Customize escobar_hilite.erl for ejabberd purposes.
SVN Revision: 2699
2009-10-23 15:12:32 +00:00
Badlop abcb3f22a8 Add escobar_hilite.erl and escobar.css.
SVN Revision: 2698
2009-10-23 15:12:16 +00:00
Badlop f7a5689c45 Move overview.edoc to src/ dir.
SVN Revision: 2697
2009-10-23 15:12:01 +00:00
Badlop bebc5a137a Rename directory doc/api to doc/devdoc
SVN Revision: 2696
2009-10-23 15:11:43 +00:00
Badlop 5625f7d984 Fix mistake that disallowed s2s_out connections when using Erlang R12 or older.
SVN Revision: 2695
2009-10-22 14:44:00 +00:00
Badlop c889491e2f The road-to-exmpp branch now becomes trunk.
SVN Revision: 2693
2009-10-21 12:58:55 +00:00
Christophe Romain cd09381efd update pubsub patch
SVN Revision: 2691
2009-10-21 08:31:51 +00:00
Pablo Polvorin 306cff729c Merge with trunk #2687 (EJAB-667) (untested)
SVN Revision: 2690
2009-10-20 22:09:43 +00:00
Badlop 4083267cc9 Mention the change in nodename slash separation in release notes.
SVN Revision: 2689
2009-10-20 15:39:57 +00:00
Badlop 12573ed8d2 Body tag not properly closed in HTTP-Bind (thanks to Janusz Dziemidowicz)(EJAB-1075)
SVN Revision: 2686
2009-10-20 09:56:51 +00:00
Badlop 6b4651fad6 In default config, only local accounts can create rooms and pubsub nodes.
SVN Revision: 2684
2009-10-19 17:05:13 +00:00
Badlop 0095f4fbf9 Provide send_timeout_close option in TCP only in R13B or higher (EJAB-926)
SVN Revision: 2682
2009-10-19 14:53:39 +00:00
Badlop 372658d299 Merged from trunk SVN r2671:
Support gen_tcp send timeout: Close the connection if the other end has disconnected ungracefully or cannot keep up with the rate at which we are sending data (EJAB-926)

SVN Revision: 2681
2009-10-19 14:53:21 +00:00
Badlop 227514c20c Support ejabberd_listener option 'backlog' to increase TCP backlog (thanks to Janusz Dziemidowicz)(EJAB-1063)
SVN Revision: 2679
2009-10-19 13:24:13 +00:00
Badlop 9a6c869cb8 Fix word Sensible with Sensitive (thanks to Marcin Owsiany)(EJAB-1071)
SVN Revision: 2676
2009-10-19 10:50:00 +00:00
Badlop dce7b1430b Start mnesia as a permanent application (thanks to Brian Cully)(EJAB-1068)
SVN Revision: 2674
2009-10-19 10:42:19 +00:00
Badlop 162fbc2ef8 Small fix in RSM decoding (thanks to Alexander Tsvyashchenko)(EJAB-1066)
SVN Revision: 2670
2009-10-15 22:46:50 +00:00
Badlop 13b8940606 Fixed more gcc signedness warnings
SVN Revision: 2669
2009-10-13 22:31:06 +00:00
Badlop f1b9f1fb63 Fix EDoc compilation errors.
SVN Revision: 2667
2009-10-13 21:36:32 +00:00
Christophe Romain 861cc87272 prevent remove_user from blocking gen_server, and allow plugin to change broadcasted payload on publish
SVN Revision: 2665
2009-10-13 16:42:13 +00:00
Badlop e5fb89731c If s2s fails due to namespace mismatch, show differences to help debugging the problem.
SVN Revision: 2663
2009-10-12 22:51:53 +00:00
Christophe Romain 2565a670b1 fix get_item issue on authorize access model (thanks to brian cully) (EJAB-1060)
SVN Revision: 2661
2009-10-12 15:25:00 +00:00
Badlop 74cd5ffb02 Autodetect compilation parameters for Mac OS X Snow Leopard (EJAB-1056)
SVN Revision: 2659
2009-10-12 12:59:07 +00:00
Christophe Romain c3303ce364 return invalid-options on badly formed subscription options
SVN Revision: 2657
2009-10-12 10:23:51 +00:00
Christophe Romain 2042ab090d Default pubsub messages to headline if nothing is configured (thanks to Brian Cully) (EJAB-1061)
SVN Revision: 2655
2009-10-12 09:06:37 +00:00
Badlop 13a231f6fa Add debug message on command execution
Merged from trunk@2650.

SVN Revision: 2653
2009-10-09 12:01:43 +00:00
Badlop 503defac73 Fix regression for authorize node subscription (thanks to Brian Cully)(EJAB-1060)
SVN Revision: 2652
2009-10-09 12:01:30 +00:00
Badlop 2d41c81890 Document new option max_fsm_queue.
SVN Revision: 2649
2009-10-08 14:34:32 +00:00
Badlop 036095f37d New option added: max_fsm_queue. Removed hardcoded FSMLIMITS. (thanks to Evgeniy Khramtsov)
Merged from trunk@2645

SVN Revision: 2647
2009-10-08 11:33:32 +00:00
Badlop a2bb22a0e7 Use queue to reduced quadratic time effort on selective receive (thanks to Alexey Shchepin)
Merged from trunk@2644

SVN Revision: 2646
2009-10-08 11:33:18 +00:00
Christophe Romain 65926460b2 allow max_items_node use on pep
SVN Revision: 2643
2009-10-06 15:22:02 +00:00
Badlop f4e35033e7 Improve stream error stanza when receives invalid handshake from component.
SVN Revision: 2641
2009-10-06 10:05:10 +00:00
Badlop 75793f7cf4 New CAPTCHA script since previous one has been broken (thanks to Evgeniy Khramtsov)(merged from trunk@2631)
SVN Revision: 2639
2009-10-02 15:04:16 +00:00
Mickaël Rémond e36c530732 Describe how to compile ejabberd on Mac OS X Snow Leopard with Erlang R13B-2
SVN Revision: 2637
2009-09-27 14:31:52 +00:00
Christophe Romain 53edf861e0 do not create hometree base when hometree not configured as plugin
SVN Revision: 2635
2009-09-25 13:14:59 +00:00
Christophe Romain 24afead423 fix EJAB-1054 (thanks to Evgeniy Khramtsov)
SVN Revision: 2633
2009-09-25 12:48:10 +00:00
Christophe Romain 2f5211ab74 improve waiting caps clean (EJAB-1054)
SVN Revision: 2629
2009-09-24 19:52:46 +00:00
Christophe Romain b168cd7cf2 fix EJAB-1044 and EJAB-1055
SVN Revision: 2628
2009-09-24 19:47:01 +00:00
Badlop 667fc07ec6 Recomppile guide.
SVN Revision: 2624
2009-09-24 13:36:48 +00:00
Christophe Romain e5a26b388f rename pep_sendlast_offline option to ignore_pep_from_offline (EJAB-1047)
SVN Revision: 2623
2009-09-23 22:00:53 +00:00
Christophe Romain 479b04a6a3 fix Makefile.win32 for including stun (thanks to neustradamus)
SVN Revision: 2620
2009-09-23 21:12:44 +00:00
Badlop b12b18d59f Fix wrong XEP number to XEP-0227
SVN Revision: 2618
2009-09-23 17:27:09 +00:00
Christophe Romain b3955fca3a fix EJAB-1048 and EJAB-819, thanks to badlop
SVN Revision: 2616
2009-09-23 16:32:06 +00:00
Badlop bac5c30380 Replace several mentions of Jabber to XMPP (thanks to Nicolas Vérité)
SVN Revision: 2614
2009-09-23 15:29:34 +00:00
Mickaël Rémond 4ce2890af0 Replaced Jabber references in config file with XMPP, official name of the protocol
SVN Revision: 2612
2009-09-23 12:37:58 +00:00
Badlop 169a0471b9 Document more ejabberd commands in the Guide (EJAB-1041)
SVN Revision: 2609
2009-09-21 10:14:06 +00:00
Christophe Romain 6bdf4aa960 improve configure parsing in iq_pubsub (sync with ejabberd 2.1.0)
SVN Revision: 2605
2009-09-20 08:14:24 +00:00
Christophe Romain 36676f0719 fix missing member affiliation on odbc plugin
SVN Revision: 2604
2009-09-18 13:44:12 +00:00
Christophe Romain bb1fca058d Return terminal binding condition on max stanza size limit (thanks to Aleksey)
SVN Revision: 2602
2009-09-18 13:33:12 +00:00
Jérôme Sautret b4c161e04a Merge r2592 and r2593 from trunk:
Fix pubsub tables constraints in MySQL schema creation script.
Add a "created_at" column to some tables in the MySQL schema to store
a timestamp (thanks to Pedro Melo, EJAB-376).

SVN Revision: 2594
2009-09-10 16:59:58 +00:00
Christophe Romain 376741c9a1 fix delete item to allow owner being able to remove all publisher items, and also fix EJAB-1036
SVN Revision: 2591
2009-09-09 21:49:23 +00:00
Badlop 04e86829e3 Change some error messages.
SVN Revision: 2588
2009-09-07 14:31:34 +00:00
Christophe Romain 75dbcd5c68 fix minor timestamp shift between item creation and modification
SVN Revision: 2586
2009-09-04 23:34:05 +00:00
Pablo Polvorin 283aa52b31 Port #2583 from trunk
Use the local (target) domain for firing the s2s_receive_packet hook.  

It was using the external server domain (LFrom) instead of the local domain (LTo).  
This might have impact on mod_caps in s2s scenarios, needs further attention.

SVN Revision: 2584
2009-09-04 21:33:30 +00:00
Badlop 29b2da42f5 Replace calls from 'regexp' to the OTP R12 new module 're' (EJAB-921)
SVN Revision: 2582
2009-09-02 14:26:01 +00:00
Badlop 330a4c9452 Small fix exmpp related code
SVN Revision: 2581
2009-09-02 14:25:42 +00:00
Christophe Romain fa23b83dbb improve previous patch
SVN Revision: 2579
2009-09-01 13:23:19 +00:00
Badlop 81f4644622 Fix missing tag when configuring subscription option (thanks to Clochix)
SVN Revision: 2577
2009-09-01 08:19:14 +00:00
Badlop 095cd6ce9b BOSH module optimization and clean-up (thanks to Aleksey Shchepin and Mickaël Rémond)(EJAB-936)
Unfortunately, http-bind doesn't work in this branch,
neither in this commit or before it.

SVN Revision: 2575
2009-08-31 18:40:25 +00:00
Badlop f5eb9e3c9f Support zlib compression after STARTTLS (thanks to Aleksey Shchepin)(EJAB-499)
Unfortunately, zlib compression doesn't work in this branch,
neither in this commit or before it.

SVN Revision: 2572
2009-08-31 16:30:19 +00:00
Badlop 98f93104a7 Rename erlang log file sasl.log to erlang.log (EJAB-783)
SVN Revision: 2568
2009-08-31 11:03:35 +00:00
Christophe Romain 3940a6bab3 secure calls to ets:lookup
SVN Revision: 2564
2009-08-28 16:28:22 +00:00
Christophe Romain de78508f45 fix send last item issue
SVN Revision: 2561
2009-08-28 00:09:21 +00:00
Christophe Romain fab29f4cf0 port all recent fixes from trunk related to odbc subscriptions
SVN Revision: 2559
2009-08-27 23:09:20 +00:00
Christophe Romain adfca08e43 remove INFO_MSG call inside sql_query_internal
SVN Revision: 2557
2009-08-27 22:30:57 +00:00
Christophe Romain 35e8b95928 added pubsub odbc tables creation
SVN Revision: 2550
2009-08-27 09:49:37 +00:00
Christophe Romain f5091aa1ae pubsub now is sync with last trunk
SVN Revision: 2546
2009-08-27 08:48:21 +00:00
Christophe Romain bb08207569 fix node_public portage
SVN Revision: 2545
2009-08-27 08:34:16 +00:00
Christophe Romain 71e0d7d8e2 port commit from r2527 to odbc plugin
SVN Revision: 2544
2009-08-27 08:26:22 +00:00
Christophe Romain 3b27670d4d update win32 makefile
SVN Revision: 2542
2009-08-27 07:55:45 +00:00
Pablo Polvorin 944dd1cc7f Port pubsub odbc backend to exmpp.
Warning: A work in progress, isn't working yet!

SVN Revision: 2541
2009-08-26 20:27:57 +00:00
Evgeniy Khramtsov ba3a45452e check if a room is not persistent before starting a new one with the same name (EJAB-1026)
SVN Revision: 2540
2009-08-26 04:18:42 +00:00
Pablo Polvorin f7c5a4a15b backport trunk commit r2530
SVN Revision: 2538
2009-08-25 20:33:01 +00:00
Pablo Polvorin 4d5bfe2ee8 Fix pubsub_publish_item_ hook call parameter and jid conversion on node_hometree.
published messages are delivered to subscribers (flat nodes).

SVN Revision: 2537
2009-08-25 20:03:28 +00:00
Pablo Polvorin a1a6469ed0 Updated to trunk r2532, fix subscription managment (by owner)
SVN Revision: 2536
2009-08-25 19:54:44 +00:00
Pablo Polvorin fcf66c2e75 Fix affiliation managment
Node owner can add/remove affiliations

SVN Revision: 2535
2009-08-25 17:42:25 +00:00
Pablo Polvorin b4f0bb65c6 Fix disco#items on pubsub nodes
SVN Revision: 2534
2009-08-25 17:23:43 +00:00
Pablo Polvorin 938a4007b3 Initial port of pubsub changes(up to r2444) to exmpp branch.
pubsub odbc isn't ported yet.  
Not tested (only basic node creation and configuration), should still have losts of bugs to discover.

SVN Revision: 2533
2009-08-25 17:14:30 +00:00
Badlop 6470e6cc25 Write PID file, path is configurable in ejabberdctl.cfg (EJAB-1023)
SVN Revision: 2527
2009-08-24 21:21:39 +00:00
Badlop 9769a17866 Document that the admin can install ejabberd.init script (EJAB-755)
SVN Revision: 2525
2009-08-24 19:59:44 +00:00
Badlop 19355e947e Prepare ejabberd.init when installing ejabberd.
SVN Revision: 2524
2009-08-24 19:59:30 +00:00
Badlop d9a8c89b5a Added preliminary template file for ejabberd.init (thanks to Christophe Romain)
SVN Revision: 2523
2009-08-24 19:59:17 +00:00
Evgeniy Khramtsov 6688b4ea78 do not include MAPPED-ADDRESS in new style responses since it is not required by the RFC
SVN Revision: 2515
2009-08-21 06:07:55 +00:00
Badlop d05565c6e0 Show example config to disable account create/delete, and allow password change.
SVN Revision: 2513
2009-08-20 21:45:15 +00:00
Badlop ec26a28cd2 Merge 2427 from trunk: return timeout in requests if DB connection can't be established
SVN Revision: 2511
2009-08-20 17:37:37 +00:00
Badlop 05755b9b09 Merge some old English fixes from trunk SVN.
SVN Revision: 2505
2009-08-19 17:59:49 +00:00
Badlop 007cafa7cd Fix EDoc errors.
SVN Revision: 2495
2009-08-17 17:17:34 +00:00
Badlop a9ce2fc38a Display room service messages in distintive blue colour.
SVN Revision: 2492
2009-08-15 22:03:14 +00:00
Badlop 0175932d86 Update Ingoing s2s connections inner state to hold domain name (thanks to Juan Pablo Carlino)(EJAB-972)
SVN Revision: 2490
2009-08-15 21:39:41 +00:00
Badlop 26cdea53c7 Don't allow room config to enable password protection with empty password (EJAB-1011)
SVN Revision: 2488
2009-08-15 20:11:24 +00:00
Badlop e585b07d76 If room config violates service policy, return not-acceptable instead of bad-request.
SVN Revision: 2487
2009-08-15 20:11:10 +00:00
Badlop 6eb5b544b4 Remove workarounds that supported R11 or older (EJAB-446)(EJAB-628)(EJAB-997)
SVN Revision: 2486
2009-08-15 20:10:49 +00:00
Evgeniy Khramtsov 9c0495b563 removed unnecessary gen_server call
SVN Revision: 2477
2009-08-13 10:02:04 +00:00
Badlop 2c25db28c4 Describe the options syntax, not only the name (EJAB-998)
SVN Revision: 2473
2009-08-12 14:18:47 +00:00
Badlop 14464ab6cc Add support in WebAdmin for the new listener network protocol
SVN Revision: 2464
2009-08-11 18:24:12 +00:00
Badlop a4b2d032f9 Add stun directory to compilation process
SVN Revision: 2463
2009-08-11 18:23:54 +00:00
Badlop 3078c28d1a Document STUN server (thanks to Evgeniy Khramtsov), and minor doc enhancements.
* Add stun listener to example config file, disabled.
* Improve enumeration of listeners options

SVN Revision: 2460
2009-08-11 13:22:39 +00:00
Evgeniy Khramtsov cf90c8176e updated top supervisor for STUN support
SVN Revision: 2459
2009-08-11 13:17:46 +00:00
Evgeniy Khramtsov 0a8bcf6530 restore missing stun directory
SVN Revision: 2458
2009-08-11 12:54:40 +00:00
Evgeniy Khramtsov bf0dbeb8b3 STUN support backport
SVN Revision: 2457
2009-08-11 12:53:46 +00:00
Badlop b453ee5e1f Update URLs of IETF and XMPP protocol documents
SVN Revision: 2456
2009-08-11 11:49:54 +00:00
Badlop 2e8fe6a1ab Add ejabberd command to get the current loglevel (EJAB-1004)
SVN Revision: 2449
2009-08-07 14:56:12 +00:00
Badlop e0be566491 ejabberdctl commands use _ instead of -. For backwards compatibility - is still supported.
SVN Revision: 2448
2009-08-07 14:55:08 +00:00
Badlop 936b2d4188 Merge 2426 from trunk: add get/0 API function that returns current log level (EJAB-1004).
SVN Revision: 2436
2009-08-06 22:01:01 +00:00
Badlop 9a204593e1 Merge 2425 from trunk: fix keepalive query, broken by r2092.
SVN Revision: 2435
2009-08-06 21:57:53 +00:00
Badlop 6aa4bb9f08 Merge 2422, 2423: cosmetic change, fix shell function syntax (EJAB-1003), use variable for Erlang shell.
SVN Revision: 2434
2009-08-06 21:54:10 +00:00
Badlop 562e63a3b0 Fix argument passing
SVN Revision: 2433
2009-08-06 21:15:15 +00:00
Badlop 663e29af89 Document options for Roster Versioning (EJAB-964)
SVN Revision: 2432
2009-08-06 21:07:23 +00:00
Badlop 4f6b67b190 Move functions from roster_versioning to mod_roster (EJAB-964)
SVN Revision: 2431
2009-08-06 21:07:18 +00:00
Pablo Polvorin 1b85310f1a Support for roster versioning (EJAB-964)
Introduces two options for mod_roster and mod_roster_odbc:
- {versioning, true | false}   Enable or disable roster versioning on ejabberd.
- {store_current_id, true | false}   If true, the current roster version is stored on DB (internal or odbc). Otherwise it is calculated on the fly each time.

Performance:
Setting store_current_id to true should help in reducing the load for both ejabberd and the DB.

Details: 
If store_current_id is false,  the roster version is a hash of the entire roster. If store_current_id is true, the roster version is a hash, but of the current time
(this has to do with transactional semantics; we need to perform both the roster update and the version update on the same transaction, but we don't   
have the entire roster when we are changing a single item on DB. Loading it there requires significant changes to be introduced, so I opted for this simpler approach).

In either case, there is no difference for the clients, the roster version ID is opaque.

IMPORTANT:
mod_shared_roster is not compatible with the option 'store_current_id'.  Shared roster and roster versioning can be both enabled, but store_current_id MUST be set to false.

SVN Revision: 2428
2009-08-06 15:45:13 +00:00
Badlop 6aa3706bec Support XEP-0227 Portable Import/Export (EJAB-993)
SVN Revision: 2421
2009-08-05 18:23:54 +00:00
Pablo Polvorin 92ad67a814 Fix problems when deleting a roster item.
The deleted item was left on the user roster, and unsubscribe presence stanza wasn't sent to the unsubscribed user.

SVN Revision: 2420
2009-08-05 17:39:47 +00:00
Badlop 14399e3d57 Support XEP-0199 Ping (thanks to Brian Cully and Evgeniy Khramtsov)(EJAB-974)
SVN Revision: 2419
2009-08-03 19:33:42 +00:00
Badlop a321ab3653 Document the new option s2s_dns_options, expressed in seconds (EJAB-994)
SVN Revision: 2418
2009-08-03 15:04:52 +00:00
Evgeniy Khramtsov ce3fa18fb6 fixes incorrect substitution of an LDAP pattern
SVN Revision: 2415
2009-07-31 06:43:17 +00:00
Badlop 4064e933fe ejabberd 3.0.0 will require Erlang/OTP R12B-4 or higher, or R13B or higher (EJAB-997)
SVN Revision: 2410
2009-07-30 18:29:46 +00:00
Badlop f5868a0952 Delete expat_erl, stringprep, xml and xml_stream; replaced by exmpp (EJAB-991)
SVN Revision: 2409
2009-07-30 17:57:56 +00:00
Evgeniy Khramtsov 35c1c3774c do not crash on unmatched request
SVN Revision: 2407
2009-07-30 13:10:01 +00:00
Geoff Cant 628b03f3c0 EJAB-994: Implements DNS timeouts and retries.
SVN Revision: 2405
2009-07-30 12:35:18 +00:00
Evgeniy Khramtsov c6f3fbb82c treap.erl backport
SVN Revision: 2400
2009-07-29 03:43:58 +00:00
Geoff Cant 504cc7b7dd EJAB-940: Implements reliable ODBC transaction nesting.
SVN Revision: 2396
2009-07-28 13:43:00 +00:00
Badlop e6205e8f26 Fix error when nick registration stanza doesn't contain Value.
SVN Revision: 2395
2009-07-27 09:37:24 +00:00
Badlop 620a50223c New command to dump a table to text file.
SVN Revision: 2391
2009-07-23 15:23:26 +00:00
Badlop 646adbf186 Add support to delete content and delete table.
SVN Revision: 2390
2009-07-23 15:23:21 +00:00
Badlop 73f2fc76d9 Log an error if HTTP request does not include Host header (EJAB-966)
SVN Revision: 2387
2009-07-23 14:51:16 +00:00
Evgeniy Khramtsov 553969f0fd delete/2 now does not crash when there is nothing to delete. fold/1 added
SVN Revision: 2385
2009-07-22 06:52:47 +00:00
Mickaël Rémond ee142c5fe1 Fix typo from EJAB-988
SVN Revision: 2381
2009-07-21 19:18:22 +00:00
Badlop 97dfcb9fb0 HTML room logs: fix formatting of spaces; log config when disabling logging; display occupants (EJAB-986)
SVN Revision: 2379
2009-07-21 18:35:20 +00:00
Badlop 97ee31e751 Allow content types to be configured in ejabberd.cfg (EJAB-975)(thanks to Brian Cully)
SVN Revision: 2377
2009-07-21 17:32:29 +00:00
Badlop 338af10aaf moved some log reports from error to debug level (thanks to Evgeniy Khramtsov)
SVN Revision: 2374
2009-07-20 09:21:42 +00:00
Badlop 020a3e6d6b Revert workaround of EJAB-611 because it seems no longer required (EJAB-709)
SVN Revision: 2371
2009-07-17 21:47:26 +00:00
Badlop 5e05ad03bb Support XEP-0157: Contact Addresses for XMPP Services (EJAB-235)
SVN Revision: 2369
2009-07-17 20:47:40 +00:00
Badlop 8d988d1bd2 Store account number in internal auth of (EJAB-981)(thanks to Juan Pablo Carlino)
SVN Revision: 2366
2009-07-17 19:06:42 +00:00
Badlop f3db058fef If a command is already defined: log as Debug, not as Warning.
SVN Revision: 2363
2009-07-16 20:18:36 +00:00
Badlop b49a15efeb If directory /sbin is created, set permissions 755, not 750.
SVN Revision: 2359
2009-07-07 08:27:58 +00:00
Badlop be5b35e999 Temporary Debug and Ctl nodes must get nodename similar to destination.
SVN Revision: 2357
2009-07-06 14:11:35 +00:00
Badlop 30697ca0a1 Add -hidden flag when calling Debug or Ctl
SVN Revision: 2356
2009-07-06 14:11:31 +00:00
Badlop 0e19ca68b4 Support XEP-0085 Chat State Notifications (EJAB-961)
SVN Revision: 2351
2009-06-30 19:33:09 +00:00
Badlop f82131af15 Include original timestamp on delayed presences (thanks to Mickael Remond)(EJAB-234)
SVN Revision: 2349
2009-06-30 17:51:37 +00:00
Badlop 16ca8d178d Add XEP82 Date Time, update XEP202 Entity Time and XEP203 Delayed Delivery (EJAB-234)
SVN Revision: 2347
2009-06-30 16:55:26 +00:00
Badlop cdac156f2e Add announcement of offline feature to service discovery (EJAB-234)
SVN Revision: 2346
2009-06-30 16:54:46 +00:00
Badlop ba335346f2 Don't use lists:keyfind/3 bcause it was introduced only in recent R13A.
SVN Revision: 2342
2009-06-25 18:05:34 +00:00
Badlop 82b3790f85 Improve explanation about SSL for port 5223 and its option 'tls'.
SVN Revision: 2340
2009-06-25 18:03:29 +00:00
Badlop 52c0fd8f09 Add note about PAM configuration for pam_winbind (thanks to Jon Bendtsen)
SVN Revision: 2338
2009-06-25 17:09:06 +00:00
Badlop e37b26e068 Improvements in the WebAdmin browsing menus.
SVN Revision: 2336
2009-06-25 17:04:03 +00:00
Badlop 6ac4157fc1 Add Vim folding
SVN Revision: 2335
2009-06-23 21:13:04 +00:00
Badlop b9cbb7a72b Detect auth errors and report in log file. Support auth when domain not provided.
SVN Revision: 2331
2009-06-22 23:14:18 +00:00
Badlop 0aca6920a7 ejabbed 3.0.0 requires exmpp 0.9.1 or higher.
SVN Revision: 2328
2009-06-17 09:07:02 +00:00
Badlop a6e8e10a3d Erlang/OTP R13B can be used, but its support is still experimental.
SVN Revision: 2327
2009-06-17 09:06:57 +00:00
Badlop bfbc69e8f9 Update version number to 3.0.0-alpha
SVN Revision: 2326
2009-06-17 09:06:52 +00:00
Badlop 13c76c12f8 Workaround to compile with exmpp
SVN Revision: 2324
2009-06-16 18:28:06 +00:00
Badlop 08ebf50480 Add permanent section about mod_http_fileserver to the Guide. Example config.
SVN Revision: 2323
2009-06-16 18:28:01 +00:00
Badlop a6b5e6360b Add unit test script for http-bind service (thanks to Stefan Strigler)
SVN Revision: 2322
2009-06-16 18:27:55 +00:00
Badlop b49f8a81a8 Add forgotten copyright and license notices.
SVN Revision: 2321
2009-06-16 18:27:51 +00:00
Badlop ab5b66facc Easier debugging (EJAB-936)(thanks to Michael Remond)
SVN Revision: 2320
2009-06-16 18:27:45 +00:00
Badlop 35c6ea68cc Code clean-up (EJAB-936)(thanks to Michael Remond)
SVN Revision: 2319
2009-06-16 18:27:40 +00:00
Badlop b74cb8828b Started code clean-up (EJAB-936)(thanks to Michael Remond)
SVN Revision: 2318
2009-06-16 18:27:35 +00:00
Badlop a1b84c6fa3 Replaced sha1 to hexadecimal transformation with sha:sha/1 call (thanks to Alexey Shchepin)
SVN Revision: 2317
2009-06-16 18:27:31 +00:00
Badlop 3e3d01063d Replace TYPE/1 with is_TYPE/1 (EJAB-922)
SVN Revision: 2316
2009-06-16 18:27:27 +00:00
Badlop c19cc61c48 Simplified code.(thanks to Michael Remond)
SVN Revision: 2315
2009-06-16 18:27:24 +00:00
Badlop 5854edafdd Properly warn user and admin when mod_http_bind is not started.(thanks to Michael Remond)
SVN Revision: 2314
2009-06-16 18:27:18 +00:00
Badlop 2c33e72eea Do not clear input when dispatching a get when we have nothing to output. (thanks to Geoff Cant)
SVN Revision: 2313
2009-06-16 18:27:14 +00:00
Badlop 24ab5026c9 Changed the place where database is created(thanks to Michael Remond)
SVN Revision: 2312
2009-06-16 18:27:10 +00:00
Badlop c74ef80f79 Fix remote-stream-error stanzas
SVN Revision: 2311
2009-06-16 18:27:05 +00:00
Badlop eeb11046d5 New option max_inactivity to configure maximum inactivity period (EJAB-512)
SVN Revision: 2310
2009-06-16 18:27:01 +00:00
Badlop 66f3f0f3de Fix warning of unused Host variable
SVN Revision: 2309
2009-06-16 18:26:57 +00:00
Badlop a1bce24461 Include condition in http-bind terminate body when service stops (EJAB-792)
SVN Revision: 2308
2009-06-16 18:26:53 +00:00
Badlop 1c2d0afd95 Fix unknown rid error (thanks to Jerome Sautret)
SVN Revision: 2307
2009-06-16 18:26:48 +00:00
Badlop 6e52ca3f4e Implement packets reordering to avoid race conditions (EJAB-724).(thanks to Michael Remond)
SVN Revision: 2306
2009-06-16 18:26:44 +00:00
Badlop 1d1f72fdc2 Updated IP retrieving (thanks to Alexey Shchepin)
SVN Revision: 2305
2009-06-16 18:26:40 +00:00
Badlop d25bd8c1c6 Improve ip fetching patch (thanks to Christohpe Romain)
SVN Revision: 2304
2009-06-16 18:26:36 +00:00
Badlop 3e0827deea Retrieve correct IP from http connection (thanks to Christohpe Romain)
SVN Revision: 2303
2009-06-16 18:26:31 +00:00
Badlop 481c7ea4e6 Fix syntax error. (thanks to Jerome Sautret)
SVN Revision: 2302
2009-06-16 18:26:27 +00:00
Badlop 646477be08 Removed HTTP bind session count. Removed the 'sponsored bind session' text. (thanks to Michael Remond)
Details:
Removed the HTTP bind session count because it leaks information on the size of the platform.
Removed the text 'sponsored by Mabber' because it is confusing, as people could think a third-party service using HTTP bind is sponsored by Mabber.

SVN Revision: 2301
2009-06-16 18:26:23 +00:00
Badlop 3e2c626696 Do not display error message when starting several hosts (EJAB-571) (thanks to Christohpe Romain)
SVN Revision: 2300
2009-06-16 18:26:19 +00:00
Badlop 38ce8b494e Provide explanation in error message when module is already started for another vhost
SVN Revision: 2299
2009-06-16 18:26:15 +00:00
Badlop 292e2f6b69 Removed small warning
SVN Revision: 2298
2009-06-16 18:26:11 +00:00
Badlop 94c3a384b1 Bugfixes (thanks to Alexey Shchepin)
SVN Revision: 2297
2009-06-16 18:26:07 +00:00
Badlop 5f07b4bf9b Removed receive_loop (thanks to Alexey Shchepin)
SVN Revision: 2296
2009-06-16 18:26:02 +00:00
Badlop 68754c4b5d Remove Erlang module attribute 'vsn' because it does not provide any worth feature, and it difficults hot code update (EJAB-440)
SVN Revision: 2295
2009-06-16 18:25:59 +00:00
Badlop ff4ccc1d85 Bugfix when table does not exist (thanks to Justin Kirby)
SVN Revision: 2294
2009-06-16 18:25:54 +00:00
Badlop d84a2f8215 Migration code for people using previous version of the HTTP binding module (EJAB-390)
SVN Revision: 2293
2009-06-16 18:25:51 +00:00
Badlop 86738e965f Do not overwrite the stanza namespace (thanks to Anastasia Gornostaeva)
SVN Revision: 2292
2009-06-16 18:25:46 +00:00
Badlop 818f28d85f Support for c2s ACL access, max_stanza and shaper on http_poll connections (EJAB-243, EJAB-415, EJAB-416)(thanks to Michael Remond)
SVN Revision: 2291
2009-06-16 18:25:42 +00:00
Badlop 5f7356c16c The Erlang/OTP function httpd_util:to_lower/1 is deprecated, and it is recommended to use string:to_lower/1 instead.
SVN Revision: 2290
2009-06-16 18:25:38 +00:00
Badlop b0b708ddea Use DEBUG instead of INFO_MSG to keep log files small. Fix parse errors for grepping 'stream:error' (thanks to Stefan Strigler)
SVN Revision: 2289
2009-06-16 18:25:34 +00:00
Badlop 4adf23b4e9 Forgot keyword 'catch' when doing list_to_float on bosh version attribute for initial request (thanks to Stefan Strigler)
SVN Revision: 2288
2009-06-16 18:25:30 +00:00
Badlop 2f29e761c2 Fixes for pausing sessions; did not parse 'pause' attribute to int (thanks to Stefan Strigler)
SVN Revision: 2287
2009-06-16 18:25:26 +00:00
Badlop 8aede81188 Support pausing sessions (thanks to Stefan Strigler) (thanks to Stefan Strigler)
SVN Revision: 2286
2009-06-16 18:25:22 +00:00
Badlop c151da684d Comment-header: talk about xmpp over bosh rather than http binding (thanks to Stefan Strigler)
SVN Revision: 2285
2009-06-16 18:25:18 +00:00
Badlop bf4e927142 Removed debugging stuff. Removed error condition (thanks to Stefan Strigler)
SVN Revision: 2284
2009-06-16 18:25:14 +00:00
Badlop 7cb0b1a911 Code cleanup. Code reorganization. Store version of bosh session. Use bosh version for error conditions (thanks to Stefan Strigler)
SVN Revision: 2283
2009-06-16 18:25:10 +00:00
Badlop 6cbae7025c Store version as float (thanks to Stefan Strigler)
SVN Revision: 2282
2009-06-16 18:25:06 +00:00
Badlop 202bece16d Save bosh version with session (thanks to Stefan Strigler)
SVN Revision: 2281
2009-06-16 18:25:02 +00:00
Badlop f07df01185 Code rearranged (thanks to Stefan Strigler)
SVN Revision: 2280
2009-06-16 18:24:58 +00:00
Badlop 702978fa4b Make use of macros for namespaces. Some code cleanup. (thanks to Stefan Strigler)
SVN Revision: 2279
2009-06-16 18:24:54 +00:00
Badlop b79473b2f5 Fix for 'terminate' in request, send empty body instead of error (thanks to Stefan Strigler)
SVN Revision: 2278
2009-06-16 18:24:50 +00:00
Badlop 80b59441d5 Disabled debugging (thanks to Stefan Strigler)
SVN Revision: 2277
2009-06-16 18:24:46 +00:00
Badlop f422ec457a Some code cleanup (thanks to Stefan Strigler)
SVN Revision: 2276
2009-06-16 18:24:42 +00:00
Badlop 5048b6bdaf Bosh compliance: honor xmpp:version (thanks to Stefan Strigler)
SVN Revision: 2275
2009-06-16 18:24:38 +00:00
Badlop 01dc4611b9 Restore ejabberd directory structure (src/web) for integration as patch (thanks to Christohpe Romain)
SVN Revision: 2274
2009-06-16 18:24:34 +00:00
Badlop 5495516c30 We do not send a 'version' attribute at the stream header for now (thanks to Stefan Strigler)
SVN Revision: 2273
2009-06-16 18:24:30 +00:00
Badlop 2f8112b108 Prepare_response: fixed a dbg message. Changed http header (thanks to Stefan Strigler)
SVN Revision: 2272
2009-06-16 18:24:26 +00:00
Badlop 229c24e1f2 Implements sockname and peername for compatibility (thanks to Christohpe Romain)
SVN Revision: 2271
2009-06-16 18:24:22 +00:00
Badlop 832d59803a Reverted to r76 as 97 is completely broken and should not have been checked in at all (thanks to Stefan Strigler)
SVN Revision: 2270
2009-06-16 18:24:18 +00:00
Badlop 197639a34b Minor changes (thanks to Stefan Strigler)
SVN Revision: 2269
2009-06-16 18:24:14 +00:00
Badlop bb229a3a0c Disabled debug (thanks to Stefan Strigler)
SVN Revision: 2268
2009-06-16 18:24:09 +00:00
Badlop eca818be5a Deal with return values from starting/terminating supervisor (thanks to Stefan Strigler)
SVN Revision: 2267
2009-06-16 18:24:05 +00:00
Badlop 33896adf9d Disabled debug (thanks to Stefan Strigler)
SVN Revision: 2266
2009-06-16 18:24:01 +00:00
Badlop f5223b1643 Removed my own supervisor (thanks to Stefan Strigler)
SVN Revision: 2265
2009-06-16 18:23:57 +00:00
Badlop ecc2bbd752 Renamed some vars for (thanks to Stefan Strigler)
SVN Revision: 2264
2009-06-16 18:23:53 +00:00
Badlop d019405d51 Start supervisor here (thanks to Stefan Strigler)
SVN Revision: 2263
2009-06-16 18:23:49 +00:00
Badlop 7d62dff7e5 Make use of new api for plugable http based services (thanks to Stefan Strigler)
SVN Revision: 2262
2009-06-16 18:23:45 +00:00
Badlop dd8e4c620b Initial commit of HTTP-Bind source code (thanks to Stefan Striegler)
SVN Revision: 2261
2009-06-16 18:23:40 +00:00
Badlop 77a62670d3 Add permanent section about mod_http_fileserver to the Guide. Example config.
SVN Revision: 2197
2009-06-16 13:53:25 +00:00
Badlop 8e8b78a4c3 Add forgotten copyright and license notices.
SVN Revision: 2196
2009-06-16 13:53:18 +00:00
Badlop 249ee4b318 New option directory_indices, and improve logging (thanks to Brian Cully)(EJAB-932)
SVN Revision: 2195
2009-06-16 13:53:13 +00:00
Badlop 226bcd1360 Fix capitalization of HTTP headers (thanks to Brian Cully)(EJAB-892)
SVN Revision: 2194
2009-06-16 13:53:07 +00:00
Badlop 4956ed11f4 Converted to gen_server behaviour (EJAB-561). Use the general reopen_log_hook instead of ejabberdctl command.
SVN Revision: 2193
2009-06-16 13:53:02 +00:00
Badlop b44a3c7650 Fix ip source to comply with new ip storage into ejabberd_http (thanks to Christophe Romain)
SVN Revision: 2192
2009-06-16 13:52:57 +00:00
Badlop fa83147926 Use httpd_util:to_lower when not compiling with Erlang R12 (EJAB-628)
SVN Revision: 2191
2009-06-16 13:52:52 +00:00
Badlop 14afea1a20 Added JavaScript content type
SVN Revision: 2190
2009-06-16 13:52:47 +00:00
Badlop 4fdc4a2e06 Include Last-Modified HTTP header in responses to allow caching (EJAB-546) in mod_http_fileserver and mod_muc_log_http.
SVN Revision: 2189
2009-06-16 13:52:42 +00:00
Badlop 0864e8a24f Fix error creating ETS table if enabled in several vhosts (EJAB-551). Unregister the command when stopping the module.
SVN Revision: 2188
2009-06-16 13:52:37 +00:00
Badlop 6af85aea18 Remove Erlang module attribute 'vsn' because it doesn't provide any worth feature, and it difficults hot code update (EJAB-440)
SVN Revision: 2187
2009-06-16 13:52:32 +00:00
Badlop 0d4155b902 The Erlang/OTP function httpd_util:to_lower/1 is deprecated, and it's recommended to use string:to_lower/1 instead.
SVN Revision: 2186
2009-06-16 13:52:28 +00:00
Badlop 91193bf928 Small change in accesslog file format; fix bug when accesslog conf parameter wasn't present in the conf file (thanks to Jerome Sautret)
SVN Revision: 2185
2009-06-16 13:52:17 +00:00
Badlop b57248e822 Added accesslog parameter to record requests log in a file similar to Apache (thanks to Jerome Sautret)
SVN Revision: 2184
2009-06-16 13:52:12 +00:00
Badlop 487b80b9b0 Initial commit of mod_http_fileserver (thanks to Massimiliano Mirra)
SVN Revision: 2183
2009-06-16 13:52:07 +00:00
Badlop 818a70bdd7 Do not include mod_irc, it can be found in ejabberd-modules SVN. Iconv not required. (EJAB-954)
SVN Revision: 2167
2009-06-16 11:27:33 +00:00
Mickaël Rémond 940f5be35e Fix syntax error in config file
SVN Revision: 2166
2009-06-16 00:49:09 +00:00
Badlop 88fd7b226a Add option to restrict max offline messages by Access and ACL (EJAB-951)
New option for mod_offline: access_max_user_messages.
The old option user_max_messages is no longer supported.

SVN Revision: 2163
2009-06-15 17:44:04 +00:00
Badlop 2f6cea2be3 Fix warning about a case already covered.
SVN Revision: 2161
2009-06-15 17:27:11 +00:00
Badlop b4a1b4c8fb Replace TYPE/1 with is_TYPE/1 (EJAB-922)
SVN Revision: 2160
2009-06-15 17:27:06 +00:00
Badlop 2f3963417f Prevent process crash if the IP and port of a connection is unknown.
SVN Revision: 2156
2009-06-11 18:57:03 +00:00
Badlop 8de03275c3 When client is closed, include the Reason in the stream trailer stanza.
SVN Revision: 2154
2009-06-09 12:10:24 +00:00
Badlop 60f52b2cd8 Add forgotten copyright and license notices. Fix blackspaces.
SVN Revision: 2152
2009-06-09 10:56:49 +00:00
Badlop dd101c99e5 Malformed CAPTCHA response may crash a room. This is now fixed. (thanks to Evgeniy Khramtsov)
SVN Revision: 2150
2009-06-09 09:39:07 +00:00
Badlop a45e6da3d0 Remove support of deprecated Disco Publish XEP-0030 (EJAB-904)
SVN Revision: 2141
2009-06-02 18:09:01 +00:00
Badlop 2b6f45e4c1 Update some calls from jlib:make_jid to exmpp_jid:make
SVN Revision: 2139
2009-06-01 23:44:55 +00:00
Badlop 332de67fe2 Fix some calls to exmpp
SVN Revision: 2138
2009-06-01 21:04:16 +00:00
Badlop ff3fd02115 Fix Access check: the rule can be defined in a vhost or global.
SVN Revision: 2137
2009-06-01 21:04:11 +00:00
Karim Gemayel 437c9d07f5 API renaming : bare_jid_to_binary -> bare_to_binary
SVN Revision: 2135
2009-06-01 17:00:44 +00:00
Karim Gemayel 9abe47f350 API renaming : jid_to_binary -> to_binary
SVN Revision: 2134
2009-06-01 16:59:08 +00:00
Karim Gemayel 7a884ced32 API renaming : bare_jid_to_list -> bare_to_list
SVN Revision: 2133
2009-06-01 16:54:33 +00:00
Karim Gemayel 0ace8bda8c API renaming : prepd_jid_to_list -> prep_to_list
SVN Revision: 2132
2009-06-01 16:53:48 +00:00
Karim Gemayel 15bc238297 API renaming : jid_to_list -> to_list
SVN Revision: 2131
2009-06-01 16:52:14 +00:00
Karim Gemayel 1b94c7a8b3 API renaming : compare_bare_jids -> bare_compare
SVN Revision: 2130
2009-06-01 16:50:36 +00:00
Karim Gemayel c31f99937f API renaming : compare_jids -> compare
SVN Revision: 2129
2009-06-01 16:49:00 +00:00
Karim Gemayel 4258b99b2b API renaming : lresource_as_list -> prep_resource_as_list
SVN Revision: 2128
2009-06-01 16:43:15 +00:00
Karim Gemayel 29c0e17ca2 API renaming : lresource -> prep_resource
SVN Revision: 2127
2009-06-01 16:42:07 +00:00
Karim Gemayel d51d9e9fff API renaming : lnode_as_list -> prep_node_as_list
SVN Revision: 2126
2009-06-01 16:40:51 +00:00
Karim Gemayel d5f2c41f26 API renaming : lnode -> prep_node
SVN Revision: 2125
2009-06-01 16:39:36 +00:00
Karim Gemayel 7eb395b87d API renaming : ldomain_as_list -> prep_domain_as_list
SVN Revision: 2124
2009-06-01 16:38:28 +00:00
Karim Gemayel 19d7d79229 API renaming : ldomain -> prep_domain
SVN Revision: 2123
2009-06-01 16:37:15 +00:00
Karim Gemayel 526dc54173 API renaming : parse_jid -> parse
SVN Revision: 2122
2009-06-01 16:35:55 +00:00
Karim Gemayel a136192db2 API renaming : bare_jid_to_jid -> full
SVN Revision: 2121
2009-06-01 16:34:38 +00:00
Karim Gemayel 5dbc4f9954 API renaming : jid_to_bare_jid > bare
SVN Revision: 2120
2009-06-01 16:30:15 +00:00
Karim Gemayel 447d3818f5 API renaming : make_jid -> make
SVN Revision: 2119
2009-06-01 16:26:00 +00:00
Christophe Romain 7c45f8f053 fix nodetree virtual to allow node subscription
SVN Revision: 2117
2009-05-29 00:44:07 +00:00
Christophe Romain 497d4d26bb make flat the default node plugin
SVN Revision: 2116
2009-05-29 00:27:26 +00:00
Christophe Romain db6a8c2e05 fix ets table name change
SVN Revision: 2115
2009-05-29 00:13:21 +00:00
Christophe Romain a16230c9ca pubsub: added configuration option in guide.tex, added last item cache, use default node type if given type is not configured, make node_flat the default node plugin. caps: improve cache handling
SVN Revision: 2114
2009-05-28 23:21:50 +00:00
Badlop 0bbbf468f0 Fix crashes when browsing some WebAdmin pages (EJAB-821)
SVN Revision: 2111
2009-05-27 17:29:58 +00:00
Badlop 9bcba6c8b8 Update CSS of WebAdmin menu
SVN Revision: 2110
2009-05-27 17:29:50 +00:00
Badlop a1fe76fb5b Support to select what modules to update. Split large function in smaller ones.
SVN Revision: 2109
2009-05-27 17:29:43 +00:00
Pablo Polvorin dc613df3b1 Do not indent the resulting html. Indentation in exmpp is buggy, and there isn't a real adventage on indenting the generated html
SVN Revision: 2106
2009-05-27 15:02:44 +00:00
Christophe Romain 45a8a0fb53 make get_items able to sort items in publish order (EJAB-824)
SVN Revision: 2105
2009-05-26 22:50:11 +00:00
Christophe Romain aa210166c4 improve get_entity_* to work regardless of nodetree (EJAB-937)
SVN Revision: 2104
2009-05-26 21:50:13 +00:00
Badlop 43a3fef7bb Document how to setup CAPTCHA. Install example captcha.sh (EJAB-895)
SVN Revision: 2103
2009-05-26 17:20:50 +00:00
Badlop 55bebb0f62 Implement XEP-158 CAPTCHA Forms, support in mod_muc, sample script (thanks to Evgeniy Khramtsov)(EJAB-895)
SVN Revision: 2102
2009-05-26 17:20:09 +00:00
Badlop 18ae44f930 Support LDAPS with TLS (EJAB-109)(thanks to Thomas Baden, Andy Harb, Sergei Golovan, Anton Podavalov)
SVN Revision: 2099
2009-05-25 17:16:54 +00:00
Badlop dc3899dfd9 Decrease proxy65 buffer sizes to 8192 bytes.
The original size of 65535 confused clients with tight
shapers (thanks to Evgeniy Khramtsov)

SVN Revision: 2097
2009-05-25 11:19:28 +00:00
Mickaël Rémond b6b4b0cdf9 * trunk/src/odbc/ejabberd_odbc.erl: Fix typo (EJABS-859) (EJAB-940) (CR-EJAB-10)
* branches/road-to-exmpp/src/odbc/ejabberd_odbc.erl: Likewise.

SVN Revision: 2095
2009-05-21 16:43:33 +00:00
Mickaël Rémond 8be73967fd * src/odbc/ejabberd_odbc.erl: Support for nested transactions (EJABS-859) (EJAB-940) (CR-EJAB-10)
SVN Revision: 2094
2009-05-21 16:28:49 +00:00
Christophe Romain 2e26b6bf8b PubSub: improve get_entity_* API
SVN Revision: 2091
2009-05-19 22:29:28 +00:00
Badlop b473862da6 Added API function to get current S2S connections with information
get_info_s2s_connections(Type) returns a list of incoming (or outgoing)
S2S connections with information for each one including IP address,
port number, TLS options... (thanks to Juan Pablo Carlino)

SVN Revision: 2089
2009-05-19 09:39:13 +00:00
Badlop 0a9581a375 LDAP bind attempts: log warnings and increase timeout after reject.
Merged from trunk SVN r2086:
Log warnings on unsuccessful LDAP bind attempts.
Increase timeout before the next LDAP bind attempt up to
five seconds if the last bind attempt was rejected by the
LDAP server ("soft" error) (thanks to Konstantin Khomoutov)

SVN Revision: 2087
2009-05-18 11:41:53 +00:00
Badlop 5bd67495ed Document how to convert Mnesia node name
SVN Revision: 2085
2009-05-15 22:57:40 +00:00
Badlop 23509c1688 New command to convert mnesia nodename, copied from OTP and Debian
SVN Revision: 2084
2009-05-15 22:56:55 +00:00
Badlop a63f548528 Allow to define additional Erlang options in ejabberdctl.cfg (thanks to Sergei Golovan)
SVN Revision: 2083
2009-05-15 22:56:13 +00:00
Badlop ee8ed2828a The --node argument overwrites the value of ejabberdctl.cfg
SVN Revision: 2082
2009-05-15 22:55:29 +00:00
Badlop 35daf5df78 No longer edit ChangeLog, will be auto generated for ejabberd releases.
Added new call 'make changelog' which generates a ChangeLog file by
prepending to the old file obtained from SVN the new lines obtained
from SVN Log and formatted with svn2cl.
ChangeLog will be generated and included in ejabberd releases.

SVN Revision: 2076
2009-05-14 21:12:12 +00:00
Mickaël Rémond 3ca2d4dab3 * src/ejabberd_debug.erl: Handled fprof based profiling (EJABS-872).
* src/ejabberd_app.erl: Likewise.

SVN Revision: 2075
2009-05-13 12:36:37 +00:00
Christophe Romain c12b1870b7 Fix bad transaction returncode in unsubscribe presence handler
SVN Revision: 2074
2009-05-12 21:00:05 +00:00
Christophe Romain fd36726357 Prevent race condition when calling get_caps while note_caps has not been handled yet (EJAB-934)
SVN Revision: 2072
2009-05-11 17:27:55 +00:00
Christophe Romain 8dc1bb0659 handle Example 90 of XEP-0060 (EJAB-909), and make use of nodeAttr
SVN Revision: 2069
2009-05-08 01:28:17 +00:00
Christophe Romain 38413dc236 Allow to get subscriptions on a given node (EJAB-712), and presence based fixes
SVN Revision: 2067
2009-05-08 00:02:08 +00:00
Badlop ef94ad36cd Merge 2063 from trunk.
* src/ejabberd_app.erl: Better support for profiling.
* src/ejabberd.erl: Likewise
* src/ejabberd_ctl.erl: Likewise
* src/ejabberd_debug.erl: Likewise

SVN Revision: 2064
2009-05-07 22:56:23 +00:00
Christophe Romain e40e4298ca several pubsub fixes and improvements. also fixes EJAB-913 and EJAB-871
SVN Revision: 2061
2009-05-07 00:54:44 +00:00
Badlop 1d3947c0da Replace TYPE/1 with is_TYPE/1 (EJAB-922)
SVN Revision: 2057
2009-05-06 16:54:43 +00:00
Badlop 69349925a3 * src/Makefile.in: Prevent Erlang R13B compilation warning:
behaviour X undefined (EJAB-920)

SVN Revision: 2056
2009-05-06 15:15:09 +00:00
Badlop 921c7ede0d * src/ejabberd_loglevel.erl: Use dynamic_compile instead of
ram_file_io_server. Support definition of loglevels with integer
or atom. (thanks to Geoff Cant)(EJAB-919)
* src/dynamic_compile.erl: Added erlang module that converts
string to binary loadable code by Mats Cronqvist, Chris Newcombe,
and Jacob Vorreuter.
* src/ram_file_io_server.erl: Remove file not longer useful.
* src/ejabberd.app: Likewise

SVN Revision: 2054
2009-05-06 14:51:51 +00:00
Badlop e202ec009e * src/mod_muc/mod_muc_room.erl: Fix badarg return (EJAB-899)
SVN Revision: 2053
2009-05-03 11:26:18 +00:00
Christophe Romain ced30acb20 backport pubsub/pep/caps optimizations from trunk
SVN Revision: 2052
2009-04-30 23:17:38 +00:00
Badlop 3debaf99d8 * src/ejabberd_hooks.erl: Support distributed hooks (EJAB-829)
SVN Revision: 2047
2009-04-28 14:57:16 +00:00
Badlop 2908e5da19 Merge 1969 and 1970 from trunk.
* src/ejabberd_hooks.erl: anonymous functions support.

SVN Revision: 2046
2009-04-28 14:46:12 +00:00
Badlop 5afe7cfafb * src/translate.erl: Support additional files (EJAB-925)
* contrib/extract_translations/extract_translations.erl: Likewise
* contrib/extract_translations/prepare-translation.sh: Likewise

SVN Revision: 2044
2009-04-27 20:55:35 +00:00
Badlop d7829a76ce * src/win32_dns.erl: Fix problem parsing some win32 dns (EJAB-927)
SVN Revision: 2043
2009-04-27 20:36:19 +00:00
Badlop ec779c001c * src/cyrsasl_digest.erl: Fix auth verification (EJAB-863)
SVN Revision: 2042
2009-04-27 20:24:21 +00:00
Badlop 028509c3a9 * src/jlib.erl: Fix recursive call to speedup base64
decoding (thanks to Jeffrey Rogiers)(EJAB-333)

SVN Revision: 2041
2009-04-27 19:17:17 +00:00
Christophe Romain fd5e312ed9 minor cosmetic fix
SVN Revision: 2040
2009-04-24 21:34:59 +00:00
Christophe Romain 6710d66a58 fix minor pubsub init glitch, and allow ejabberd_odbc to execute bloc of queries without transaction
SVN Revision: 2039
2009-04-24 10:32:41 +00:00
Christophe Romain 1d44abfc8a improve send last published items spawning
SVN Revision: 2037
2009-04-22 23:01:51 +00:00
Badlop 0141779b9c * src/ejabberd.cfg.example: Fix English typos. Fix line length:
max 80 characters per line. Remove trailing blankspaces. Added
markers for Vim fold, you may want to add to $HOME/.vimrc this
line: set modeline
* src/ejabberdctl.cfg.example: Likewise

SVN Revision: 2035
2009-04-22 13:45:57 +00:00
Badlop 92b1e9d9ac * src/mod_muc/mod_muc.erl: Limit number of characters in Room ID,
Name and Description (EJAB-899)
* src/mod_muc/mod_muc_room.erl: Likewise
* doc/guide.tex: Likewise
* doc/guide.html: Likewise

SVN Revision: 2034
2009-04-22 12:05:10 +00:00
Badlop 43b59911e2 * src/cyrsasl.erl: Change API of check_password: pass a function
to generate the digest (thanks to Graham Whitted)(EJAB-863)
* src/cyrsasl_anonymous.erl: Likewise
* src/cyrsasl_digest.erl: Likewise
* src/cyrsasl_plain.erl: Likewise
* src/ejabberd_auth.erl: Likewise
* src/ejabberd_auth_anonymous.erl: Likewise
* src/ejabberd_auth_external.erl: Likewise
* src/ejabberd_auth_internal.erl: Likewise
* src/ejabberd_auth_ldap.erl: Likewise
* src/ejabberd_auth_odbc.erl: Likewise
* src/ejabberd_auth_pam.erl: Likewise
* src/ejabberd_c2s.erl: Likewise

SVN Revision: 2033
2009-04-22 11:44:03 +00:00
Badlop 240e37c387 * src/ejabberd_c2s.erl: Fix for SASL Anonymous connections not
stored or purged (thanks to Andy Skelton)(EJAB-912)

SVN Revision: 2032
2009-04-22 11:02:03 +00:00
Badlop 39f71ab2ab * src/mod_shared_roster.erl: Support in API to add 'all' as member
of a group (thanks to Martin Langhoff)(EJAB-916)

SVN Revision: 2031
2009-04-22 10:40:11 +00:00
Christophe Romain 6e37389145 fix missing greetings
SVN Revision: 2026
2009-04-17 20:43:12 +00:00
Badlop 554a9a72f1 * doc/guide.tex: Document new ejabberdctl option. New section that
documents AccessCommands. (EJAB-910)
* doc/guide.html: Likewise

SVN Revision: 2025
2009-04-17 13:53:20 +00:00
Badlop fd967d6976 * src/ejabberd_ctl.erl: New option to require auth in ejabberdctl
and restrict what commands and arguments can execute (EJAB-910)
* src/ejabberd_config.erl: Likewise

SVN Revision: 2024
2009-04-17 13:48:59 +00:00
Badlop b451f07801 * src/ejabberd_commands.erl: API to restrict who can execute what
commands and arguments (EJAB-910)

SVN Revision: 2023
2009-04-17 13:43:15 +00:00
Badlop 5ca560d0bd * src/mod_caps.erl: Fix unbound variable
SVN Revision: 2022
2009-04-17 13:40:57 +00:00
Badlop 13fcbd6413 * doc/guide.tex: Explain that the recommended Erlang/OTP version
is R12B-5, and R13 is not supported yet.
* doc/guide.html: Likewise
* README: Likewise

SVN Revision: 2021
2009-04-14 18:31:29 +00:00
Badlop 8782597c1a * src/mod_muc/mod_muc_log.erl: Linkify also xmpp:..., as it was
done previously (thanks to Konstantin Khomoutov)(EJAB-850)

SVN Revision: 2020
2009-04-14 18:25:58 +00:00
Christophe Romain ab4750ec1e after check, last commit was useless
SVN Revision: 2019
2009-04-14 12:46:55 +00:00
Christophe Romain b519fdd3cb back to original caps patch which may be safer
SVN Revision: 2018
2009-04-14 10:13:05 +00:00
Christophe Romain 08cbaf8ccf Better handling of presence hook and caps clean
SVN Revision: 2015
2009-04-10 13:21:37 +00:00
Badlop 6b2a838e24 * src/msgs/pl.po: Fix some translations (thanks to Andrzej Smyk)
SVN Revision: 2011
2009-04-09 11:18:06 +00:00
Badlop 854b448536 * src/mod_pubsub/mod_pubsub.erl: Announce PubSub features in the
server JID only if PEP is enabled (EJAB-905)

SVN Revision: 2010
2009-04-08 19:30:24 +00:00
Badlop 2195e433dc * src/mod_muc/mod_muc.erl: English fixes (thanks to Glenn Sieb)
* src/mod_muc/mod_muc_log.erl: Likewise
* src/mod_muc/mod_muc_room.erl: Likewise
* src/mod_register.erl: Likewise
* src/web/ejabberd_web_admin.erl: Likewise

SVN Revision: 2009
2009-04-08 19:04:13 +00:00
Badlop d13be09524 * src/mod_pubsub/mod_pubsub.erl: Quickfix compilation errors.
SVN Revision: 2008
2009-04-08 18:58:11 +00:00
Badlop e34d6e3678 * src/mod_irc/mod_irc_connection.erl: Fix compilation warnings.
SVN Revision: 2006
2009-04-08 18:52:52 +00:00
Badlop 79247dad41 * doc/release_notes_2.0.5.txt: Added file for new release
SVN Revision: 2002
2009-04-01 10:37:18 +00:00
Badlop 61691ac47d Merge 1998 from trunk.
* src/ejabberd_sm.erl: Partially retract SVN r1976
EJAB-300 (EJAB-890). Check default privacy list when account, not
a specific session, receives a presence subscription
stanza (EJAB-300).
* src/ejabberd_c2s.erl: Likewise

SVN Revision: 1999
2009-03-24 18:02:13 +00:00
Christophe Romain 3e756f5d1c implement roster acces model (EJAB-780)
SVN Revision: 1997
2009-03-20 00:08:38 +00:00
Christophe Romain 026c4a2711 Allow more environment variable overrides in ejabberdctl (EJAB-891)
SVN Revision: 1996
2009-03-19 21:30:10 +00:00
Badlop cd3556f195 Fix mistake when calling win32_dns.
SVN Revision: 1990
2009-03-11 18:36:27 +00:00
Badlop d0a6ae7855 * doc/release_notes_2.0.4.txt: Added file for new release
SVN Revision: 1987
2009-03-10 16:25:20 +00:00
Badlop b245d68568 * src/tls/tls_drv.c: Fix encryption problem for ejabberd_http
after timeout (thanks to Alexey Shchepin)(EJAB-880)

SVN Revision: 1986
2009-03-10 15:21:36 +00:00
Christophe Romain 2c4effe6ce typo fix on roster access_model
SVN Revision: 1985
2009-03-10 12:09:31 +00:00
Christophe Romain 5ed381fc58 Fix PEP with other domains and s2s (EJAB-825)
SVN Revision: 1982
2009-03-10 11:13:46 +00:00
Badlop 4c08e65fab * src/tls/tls_drv.c: Fix to support OpenSSL older than
0.9.8f (EJAB-877)(thanks to Jonathan Schleifer)
* doc/guide.tex: It is again supported OpenSSL older than 0.9.8f
* doc/guide.html: Likewise

SVN Revision: 1979
2009-03-09 19:17:53 +00:00
Badlop 4dde341c9d Merge 1925 from trunk.
* src/mod_proxy65/mod_proxy65_service.erl: if an ip option is not
defined, the module takes an IP address of a local
hostname (thanks to Evgeniy Khramtsov)

SVN Revision: 1978
2009-03-09 14:44:46 +00:00
Badlop ed3cae6f11 * src/Makefile.in: In SunOS, use different C flags (thanks to
Thomas)(EJAB-438)
* src/ejabberd_zlib/Makefile.in: Likewise
* src/mod_irc/Makefile.in: Likewise
* src/stringprep/Makefile.in: Likewise
* src/tls/Makefile.in: Likewise

SVN Revision: 1977
2009-03-07 09:52:26 +00:00
Badlop 56c33e994d * src/ejabberd_c2s.erl: Enforce privacy rules also for
subscription requests (EJAB-300)
* src/ejabberd_sm.erl: Likewise

SVN Revision: 1976
2009-03-07 08:59:26 +00:00
Badlop d6820f2c2d * src/mod_privacy.erl: Temporary workaround to inconsistency
* src/mod_privacy_odbc.erl: Likewise

SVN Revision: 1975
2009-03-07 08:53:34 +00:00
Badlop cf4b7b36ee Merge 1856 from trunk.
* src/eldap/eldap.erl: moves waiting for response queries to
pending queue on an LDAP connection failure (thanks to Evgeniy
Khramtsov)

SVN Revision: 1974
2009-03-06 11:50:23 +00:00
Badlop d23ebd354b Merge 1855 from trunk.
* src/eldap/eldap.erl: implemented queue for pending
queries (thanks to Evgeniy Khramtsov)

SVN Revision: 1973
2009-03-06 11:42:56 +00:00
Badlop 66c60c4e6d Merge 1851 from trunk.
* src/eldap/eldap.erl: Close a connection on tcp_error (thanks to
Evgeniy Khramtsov)

SVN Revision: 1972
2009-03-06 11:39:12 +00:00
Badlop 19b803bb03 * src/ejabberd_app.erl: In a Windows machine, explicitly add the
nameservers, as it seems Erlang does not do itself (EJAB-860)
* src/win32_dns.erl: Get name servers from Windows registy (thanks
to Geoff Cant)

SVN Revision: 1968
2009-03-05 20:03:18 +00:00
Badlop 982f61774d * doc/guide.tex: Require OpenSSL 0.9.8f or higher (EJAB-877)
* doc/guide.html: Likewise

SVN Revision: 1967
2009-03-05 19:48:24 +00:00
Badlop 7982492f50 * src/ejabberd_auth.erl: If anonymous auth is enabled, when
checking if the account already exists in other auth methods, take
into account if the auth method failed (EJAB-882)
* src/ejabberd_auth_anonymous.erl: Likewise
* src/ejabberd_auth_external.erl: Likewise
* src/ejabberd_auth_internal.erl: Likewise
* src/ejabberd_auth_ldap.erl: Likewise
* src/ejabberd_auth_odbc.erl: Likewise
* src/ejabberd_auth_pam.erl: Likewise

SVN Revision: 1966
2009-03-04 18:34:02 +00:00
Badlop 7af7afc30e * src/mod_caps.erl: Fix two small compilation errors
SVN Revision: 1965
2009-03-04 09:55:20 +00:00
Christophe Romain ab2dc5877f Allow node creation without configure item
SVN Revision: 1964
2009-03-04 01:14:13 +00:00
Christophe Romain 592c98fd7a update pubsub version
SVN Revision: 1961
2009-03-04 01:04:51 +00:00
Christophe Romain facf17e689 Add roster subscriptions handling and make PEP events sent to all resources
SVN Revision: 1958
2009-03-03 23:26:07 +00:00
Badlop 1db9642e4c Merge 1916 from trunk.
* src/ejabberd_listener.erl: Fix report message of 'undef' error

SVN Revision: 1955
2009-03-03 19:48:20 +00:00
Badlop 4df4527e77 Merge 1907 from trunk.
* src/ejabberd_listener.erl: Fix a minor compilation warning and
add EDoc comment

SVN Revision: 1954
2009-03-03 19:46:08 +00:00
Badlop dbf0bb209d Merge 1891 from trunk.
* src/ejabberd_listener.erl: When stopping a listener, don't stop
the listener supervisor (EJAB-874)

SVN Revision: 1953
2009-03-03 19:43:55 +00:00
Badlop 9a7c6b8be1 Merge 1884 from trunk.
* src/ejabberd_listener.erl: More error detections

SVN Revision: 1952
2009-03-03 19:40:55 +00:00
Badlop 36fc43c364 Merge 1883 from trunk.
* src/ejabberd_listener.erl: More error detections

SVN Revision: 1951
2009-03-03 19:39:36 +00:00
Badlop f80758f0de Merge 1882 from trunk.
* src/ejabberd_config.erl: Check certfiles are readable on server
start and listener start (EJAB-753)
* src/ejabberd_listener.erl: Likewise

SVN Revision: 1950
2009-03-03 19:38:13 +00:00
Badlop 25ef60a2c1 Merge 1875 from trunk.
* src/ejabberd_listener.erl: Report error at startup if a listener
module isn't available or is not an ejabberd listener (EJAB-868)

SVN Revision: 1949
2009-03-03 19:35:32 +00:00
Badlop 5bfdb71b4c Merge 1881 from trunk.
* src/mod_privacy.erl: Privacy List: deny presence-out all + send
presence to: presence is sent (EJAB-255)
* src/ejabberd_c2s.erl: Likewise

SVN Revision: 1948
2009-03-03 19:32:48 +00:00
Badlop 890b1c4f60 Merge 1834 from trunk.
* src/mod_privacy.erl: Only run roster_get_jid_info if privacy
list has subscription or group (thanks to George Hazan)(EJAB-851).
Sort items in privacy list by order before storing (EJAB-848)
* src/mod_privacy.hrl: Likewise
* src/mod_privacy_odbc.erl: Likewise

SVN Revision: 1947
2009-03-03 19:26:24 +00:00
Badlop 4046ecc99e Merge 1880 from trunk.
* src/mod_muc/mod_muc_room.erl: Owner of a password protected room
must provide the password, like other participants (EJAB-867)

SVN Revision: 1946
2009-03-03 19:07:24 +00:00
Badlop fe297e1dea Merge 1879 from trunk.
* src/mod_muc/mod_muc_log.erl: Prevent XSS in MUC logs by
linkifying only a few known protocols (EJAB-850)

SVN Revision: 1945
2009-03-03 19:03:56 +00:00
Badlop f0c0b2230a Merge 1878 from trunk.
* src/mod_muc/mod_muc.erl: Export function to create MUC
room (thanks to Eric Cestari) (EJAB-729)

SVN Revision: 1944
2009-03-03 19:01:24 +00:00
Badlop 23ec55975e Merge 1877 from trunk.
* src/mod_roster.erl: When account is deleted, cancel presence
subscription for all roster items (EJAB-790)
* src/mod_roster_odbc.erl: Likewise

SVN Revision: 1943
2009-03-03 18:57:47 +00:00
Badlop 54da31e805 Merge 1874 from trunk.
* src/mod_shared_roster.erl: Fix bug: a pending subscription
request, and later the requester added to the roster due to a
shared roster group, that request could neither be accepted or
rejected (thanks to Brian Cully)(EJAB-869)

SVN Revision: 1942
2009-03-03 18:53:28 +00:00
Badlop b0f29b20db Merge 1876 from trunk.
* src/web/ejabberd_http_poll.erl: Allow configuration of session
timeout, using new global option http_poll_timeout (EJAB-135)
* doc/guide.tex: Document new option
* doc/guide.html: Likewise

SVN Revision: 1941
2009-03-03 18:49:02 +00:00
Badlop c13ed8c625 Merge 1872 from trunk.
* src/ejabberd_system_monitor.erl: Allow parametrizable watchdog
threshold: option watchdog_large_heap or chatting with the
watchdog bot (EJAB-545)
* src/ejabberd_config.erl: Likewise
* doc/guide.tex: Likewise
* doc/guide.html: Likewise

SVN Revision: 1940
2009-03-03 18:45:26 +00:00
Badlop 79463d7f7d Merge 1873 from trunk.
* src/web/ejabberd_web_admin.erl: Show big integers with comma
separators for easy reading

SVN Revision: 1939
2009-03-03 18:29:53 +00:00
Badlop 77ff657351 Merge 1859 from trunk.
* src/web/ejabberd_web_admin.erl: Calls to the hook
webadmin_menu_node provide the node as first argument, and calls
to webadmin_menu_hostnode provide both the host and the node. Fix
call to make_menu_items, because webadmin_menu_node was called in
cases where webadmin_menu_hostnode should be called. Align to
right some table elements.

SVN Revision: 1938
2009-03-03 18:24:42 +00:00
Badlop 85412f0a41 Merge from trunk: 1835, 1836, 1842, 1843, 1854, 1858, 1860, 1861, and 1862.
* doc/Makefile: In Clean do not remove html. In new Distclean,
remove also html.

* doc/Makefile: When cleaning, remove contributed_modules.tex

* src/Makefile.in: Fix arguments to Install program

* doc/guide.tex: Provide only an example of language option
* doc/guide.html: Likewise

* doc/guide.tex: mod_muc can run in several nodes of cluster
* doc/guide.html: Likewise

* doc/api/process-one.css: Add some style to HTML elements

* src/ejabberd_listener.erl: Fix EDoc errors
* src/web/ejabberd_web_admin.erl: Likewise

* src/ejabberd_hooks.erl: Explanation in EDoc of some functions

* doc/guide.tex: Explain that account creation is only supported
by internal and odbc authentication methods
* doc/guide.html: Likewise

* src/Makefile.in: The path to the installed copy of ejabberd
Guide is set in the environment variable
EJABBERD_DOC_PATH (EJAB-837).
* src/web/ejabberd_web_admin.erl: Likewise
* src/ejabberdctl.template: Likewise
* doc/guide.tex: Likewise
* doc/guide.html: Likewise

SVN Revision: 1937
2009-03-03 18:11:23 +00:00
Pablo Polvorin 54a6992ae0 Serialize s2s stanzas to iolist() rather than list()
SVN Revision: 1936
2009-03-02 15:48:01 +00:00
Pablo Polvorin 2c35514537 Correct include declaration (thanks to badlop). Bug was introduced in r1863
SVN Revision: 1935
2009-03-02 13:27:35 +00:00
Pablo Polvorin 7fea7b30b2 Elements and namespace for (XEP-0039) aren't know by exmpp ("http://jabber.org/protocol/stats" is represented as a list())
SVN Revision: 1934
2009-03-01 20:48:43 +00:00
Pablo Polvorin f0d55c9a3f Fix bug when clients connect using legacy ssl
(ejabberd_receiver:process_data/2 was called before initializing  the xmlstream).

SVN Revision: 1933
2009-03-01 20:18:42 +00:00
Pablo Polvorin 3336d66fc4 Host argument for ejabberd_hooks's functions must be in binary() format.
SVN Revision: 1932
2009-03-01 19:03:35 +00:00
Badlop 19d27258d9 * src/mod_pubsub/node_default.erl: Fix that non-subscriber could
fetch items from Authorize node (thanks to Brian Cully)(EJAB-873)

SVN Revision: 1930
2009-02-27 23:56:46 +00:00
Pablo Polvorin 58e4b98d61 Fix small bug introduced in revision 1924.
SVN Revision: 1929
2009-02-27 21:09:44 +00:00
Badlop c73e87e9c8 Merge fix from trunk r1910
* src/web/ejabberd_http.erl: Added a workaround for inet:peername
returning 'ebadf'

SVN Revision: 1928
2009-02-27 16:19:19 +00:00
Badlop 6482c11f92 * src/tls/tls_drv.c: S2S connection with STARTTLS fails to Gtalk
and recent Openfire (thanks to Philipp Hancke)(EJAB-877)

SVN Revision: 1926
2009-02-27 15:42:27 +00:00
Christophe Romain f4a952032a cosmetic changes
SVN Revision: 1924
2009-02-27 03:19:53 +00:00
Badlop dd5a7bcd54 * doc/guide.tex: No mention to the release date in ejabberd Guide
or release notes. The date of an ejabberd release is determined by
the date of the corresponding release announcement.

SVN Revision: 1922
2009-02-26 23:10:28 +00:00
Badlop 34f6de0c84 * src/mod_pubsub/mod_pubsub.erl: Fix incorrect implementation of
Pubsub payload requirements (thanks to Andy Skelton)(EJAB-823)

SVN Revision: 1921
2009-02-25 21:17:14 +00:00
Pablo Polvorin 2678342c4a mod_muc/mod_muc_log.erl: The logging code expect nicknames to be in list() format.
SVN Revision: 1920
2009-02-24 20:50:28 +00:00
Pablo Polvorin 0f53fea903 src/mod_echo.erl: Fix call to exmpp_xml:get_cdata_as_list/1.
SVN Revision: 1919
2009-02-24 20:25:57 +00:00
Pablo Polvorin 9b1e5928bd Remove unused var
SVN Revision: 1918
2009-02-24 20:07:32 +00:00
Pablo Polvorin 31ef821e46 Exmpp related fixed to the external components service.
SVN Revision: 1917
2009-02-24 18:52:37 +00:00
Pablo Polvorin 3119badb2b Removed a couple of expensive function calls used as arguments for
?DEBUG macros. All arguments used in the ?DEBUG macro are strictly 
evaluated (even if the loglevel is higher). 
The same is true for all log macros defined in ejabberd.hrl.  
We might need to use lazy evaluation for the arguments, when they 
are expensive to generate (wrap the arguments lists in a fun).

SVN Revision: 1915
2009-02-24 03:04:58 +00:00
Pablo Polvorin acae6e20de * Use exmpp_jid:to_binary/1 when possible.
* ejabberd_odbc:escape/1 now can escape binaries too. This 
avoid the need to convert a binary value to list() just to 
sql-escape it. The escaped value returned is allways a list() 
(ejabberd's odbc drivers only works on lists())

SVN Revision: 1914
2009-02-23 19:45:55 +00:00
Christophe Romain 7a17baccac Do not call mod_caps:clear_caps as it breaks PubSub/PEP (EJAB-854)
SVN Revision: 1913
2009-02-23 15:58:21 +00:00
Pablo Polvorin 4956259124 src/mod_roster.erl: Bugfix in remove_user/2, values already in binary() format.
SVN Revision: 1909
2009-02-21 18:07:37 +00:00
Badlop a5f70e15a2 * src/ejabberd_auth.erl: Password is undefined when using digest
SVN Revision: 1908
2009-02-21 14:41:29 +00:00
Pablo Polvorin 2df100213b mod_configure: Fix bug in form generation
SVN Revision: 1893
2009-02-20 16:34:56 +00:00
Pablo Polvorin e989d41d50 "remove_user" hook actualized to expect binary arguments.
Fix webadmin code that performs addition / removal  of users.

SVN Revision: 1892
2009-02-20 15:30:16 +00:00
Christophe Romain edc0a9ac87 fix nodetree plugin resolver, and backport last changes from trunk
SVN Revision: 1890
2009-02-19 11:29:01 +00:00
Pablo Polvorin 5334a2d965 Bugfix: mod_announce.erl:get_title/2 now accepts node argument in binary() or list() format.
SVN Revision: 1887
2009-02-18 18:14:06 +00:00
Pablo Polvorin 7c10f3422a src/web/ejabberd_web_admin.erl, src/web/ejabberd_web_admin.hrl:
Many exmpp related fixes. Fix a bug when displaying users lists, 
if we can't access the 'offline_msg' mnesia table (using mod_offline_odbc).
This fix should be temporal, we should find a better way to manage this
situation.

src/web/ejabberd_http.erl: Language must be in binary() format.

src/translate.erl: Remove a debug call to io:format/2.

src/ejabberd_sm.erl, src/mod_configure.erl, src/mod_disco.erl:
ejabberd_sm:get_user_resources/2 returns resources as binary().

src/ejabberd_sm.erl: Bugfix in get_user_info/3.

SVN Revision: 1886
2009-02-18 18:03:11 +00:00
Pablo Polvorin ea62092d6e src/ejabberd_auth.erl: Fix: for legacy authentication, the Digest parameters could be 'undefined'.
src/mod_muc/mod_muc_room.erl: Typo.
src/ejabberd_c2s.erl: Remove comment for an already done TODO.

SVN Revision: 1885
2009-02-18 13:48:06 +00:00
Christophe Romain e977d099e2 prevent from calling get_vh_registered_users/2 when not available
SVN Revision: 1871
2009-02-13 15:01:55 +00:00
Jean-Sébastien Pédron bf82bac328 o Document the type of the argument(s) and the returned type of every
functions.
o  Add guardians expression to exported functions to ensure at an early
stage that we were given the right arguments.
o  Fix table conversion to exmpp; many fields were left as string(),
preventing matching from working correctly.
o  In user_roster_item_parse_query/4, fix a bug where the same variable
was used for two distinct purpose.
o  In user_roster_item_parse_query/4, fix a bad usage of
exmpp_jid:jid_to_list/1.

PR:		EJABP-1

SVN Revision: 1867
2009-02-06 13:43:40 +00:00
Jean-Sébastien Pédron 25bd2bc7fe Document the short JID type.
PR:		EJABP-1

SVN Revision: 1866
2009-02-06 13:35:40 +00:00
Jean-Sébastien Pédron 93b26d947c Add documentation stub for some types. This will be filled later.
PR:		EJABP-1

SVN Revision: 1865
2009-02-06 13:34:12 +00:00
Jean-Sébastien Pédron 8290026940 o Document the type of the argument(s) and the returned type of every
functions.
o  Add guardians expression to many functions of ejabberd_auth and
ejabberd_auth_anonymous to ensure at an early stage that we were given
the right arguments. Other modules are not changed because they are only
used by ejabberd_auth which already does the check.

PR:		EJABP-1

SVN Revision: 1863
2009-02-05 11:13:01 +00:00
Jean-Sébastien Pédron 4badd3b6ac Disable "TODO:" interpretation in eDoc because usually, the following
text isn't in eDoc format.

PR:		EJABP-1

SVN Revision: 1857
2009-01-30 15:50:13 +00:00
Jean-Sébastien Pédron 69a2194efe exmpp_server_sasl:next_step/1 returns the mechanism as list() again, so
the call to binary_to_list/1 isn't necessary anymore.

PR:		EJABP-1

SVN Revision: 1853
2009-01-23 14:06:48 +00:00
Jean-Sébastien Pédron b5c8b99272 Document every functions to clarify the types to give and returned.
PR:		EJABP-1

SVN Revision: 1852
2009-01-23 10:10:33 +00:00
Badlop 35926b96b4 * src/odbc/mysql.sql: Fix complain about comment syntax
* src/odbc/pg.sql: Likewise

SVN Revision: 1850
2009-01-23 00:10:00 +00:00
Pablo Polvorin d1cf37bbec Small fixes
SVN Revision: 1849
2009-01-22 22:19:03 +00:00
Jean-Sébastien Pédron 4c61d254cc Add edoc-info & erlang.png to svn:ignore.
PR:		EJABP-1

SVN Revision: 1848
2009-01-22 15:56:37 +00:00
Jean-Sébastien Pédron 9c68810c77 Ignore files generated by eDoc.
PR:		EJABP-1

SVN Revision: 1847
2009-01-22 15:55:48 +00:00
Jean-Sébastien Pédron 4417608b27 Document every functions to clarify the types to give and returned.
PR:		EJABP-1

SVN Revision: 1846
2009-01-22 15:54:03 +00:00
Jean-Sébastien Pédron a105dcb060 In get_vh_session_list/1, remove a bad list_to_binary/1; now that
exmpp_stringprep return the correct type, it was used on a binary().

PR:		EJABP-1

SVN Revision: 1845
2009-01-22 15:52:30 +00:00
Jean-Sébastien Pédron 0cf0992f78 Fix some eDoc @spec directives.
PR:		EJABP-1

SVN Revision: 1844
2009-01-22 15:50:43 +00:00
Jean-Sébastien Pédron 842ebfcca0 A lot of bug fixes regarding attribute values type:
o  Fix some bugs by getting attributes as list() instead of binary().
o  Instead creating #xmlattr directly, use the new ?XMLATTR macro; it'll
take care of the anything-to-binary() conversion.
o  Fix a bug where recipient and sender were used as binary() instead of
list(), which is required by the rest of the S2S code.
o  Fix a bug where binary_to_list/1 was called on a list().

Now concerning JIDs :
o  Now that #jid{} isn't part of the API of Exmppp anymore, replace
remaining direct usages by calls to exmpp_jid.
o  Replace exmpp_jid:make_bare_jid() by exmpp_jid:make_jid().
o  Replace exmpp_jid:*_to_jid/1 by exmpp_jid:parse_jid/1.

PR:		EJABP-1

SVN Revision: 1841
2009-01-21 13:34:26 +00:00
Jean-Sébastien Pédron 376ee2ed90 o In process_iq_get/3 and process_iq_set/3, use binary() version of
LUser and LServer.
o  In convert_to_exmpp2/2, user and server are stored as binary().

PR:		EJABP-1

SVN Revision: 1840
2009-01-21 13:31:14 +00:00
Jean-Sébastien Pédron 2f1397c50e Use string() version of UserName and UserHost.
PR:		EJABP-1

SVN Revision: 1839
2009-01-21 13:30:18 +00:00
Jean-Sébastien Pédron cdbb000638 Return invalid-mechanism when a mechanism isn't supported instead of
no-mechanism, which wasn't standard-compliant.

PR:		EJABP-1

SVN Revision: 1838
2009-01-21 13:07:55 +00:00
Jean-Sébastien Pédron 8a413018c2 In match_acl/3, use string() version of User/Server/Resource to match an
ACL.

PR:		EJABP-1

SVN Revision: 1837
2009-01-21 12:44:36 +00:00
Pablo Polvorin 03f2de75f5 Typo (prolists -> proplists).
SVN Revision: 1833
2009-01-19 17:45:11 +00:00
Jean-Sébastien Pédron 38c0f3cdc8 Replace remaining calls to deprecated API:
o  In src/cyrsasl_digest.erl, replace hijacked usage of
xml:get_attr_s/2 by proper calls to proplists:get_value/3.
o  Still in src/cyrsasl_digest.erl, replace a call to
stringprep:tolower/1 by exmpp_stringprep:to_lower/1.
o  In src/ejabberd_service.erl, replace a call to xml:crypt/1 by
exmpp_xml:escape_using_entities/1.

PR:		EJABP-1

SVN Revision: 1832
2009-01-19 15:58:16 +00:00
Jean-Sébastien Pédron 4d95ac08dd Remove empty svn:mergeinfo properties so it won't get in the way during
future merges.

The server and the repository are Subversion 1.4.x: they are unable to
understand this property.

Subversion 1.5.x clients usually won't commit it on purpose when the
server and/or the repository are 1.4.x. But they will copy it when doing
WC-to-WC copy because they do not communicate with the server at this
time.

SVN Revision: 1831
2009-01-19 15:42:25 +00:00
Jean-Sébastien Pédron fc77b48344 Merge from trunk (r1804 to r1829).
The merge party is over, you may now double-check that everything is in
place.

PR:		EJABP-1

SVN Revision: 1830
2009-01-19 15:27:07 +00:00
Jean-Sébastien Pédron ff500d8297 Merge from trunk (r1787 to r1804).
Included are fixes to src/mod_configure.erl and src/mod_caps.erl.

Note: this merge doesn't include the following revisions because it was
made by previous commits:
r1766, r1768, r1781, r1783, r1794, r1797, r1799, r1802.

Warning: Ejabberd may be broken until the merge is completly finished.

PR:		EJABP-1

SVN Revision: 1829
2009-01-19 14:47:33 +00:00
Pablo Polvorin e2ee44617c translate.erl: Bugfix, ?MYLANG macro returns a list().
SVN Revision: 1828
2009-01-19 13:44:43 +00:00
Jean-Sébastien Pédron 25009ff9f4 Merge from trunk (r1764 to r1787).
Warning: Ejabberd may be broken until the merge is completly finished.

PR:		EJABP-1

SVN Revision: 1827
2009-01-19 11:59:40 +00:00
Jean-Sébastien Pédron bc51bd0dbd Merge from trunk (r1752 to r1764).
Warning: Ejabberd may be broken until the merge is completly finished.

PR:		EJABP-1

SVN Revision: 1826
2009-01-19 11:16:44 +00:00
Jean-Sébastien Pédron 8a27b5446d Fix accesses to the new #jid opaque type.
PR:		EJABP-1

SVN Revision: 1825
2009-01-19 10:14:55 +00:00
Jean-Sébastien Pédron 2cc2039ad8 Merge from trunk (r1734 to r1752).
Note: this merge doesn't include the following revisions because it was
made by previous commits:
r1737, r1740, r1745, r1747, r1748.

Additionnaly, any deprecated content was removed from jlib.hrl. This
leaves only the new RSM records.

Warning: Ejabberd may be broken until the merge is completly finished.

PR:		EJABP-1

SVN Revision: 1824
2009-01-19 10:14:04 +00:00
Pablo Polvorin 04f6a2be37 Store host and room name as binary(). Use jid_to_binary() instead of jid_to_list().
SVN Revision: 1821
2009-01-15 19:41:06 +00:00
Pablo Polvorin 2538001b08 Store registered nicknames, rooms and domains as binary().
Use document_to_iolist/1 and iolist_size/1 instead of document_to_list/1.

SVN Revision: 1820
2009-01-15 15:21:54 +00:00
Pablo Polvorin e8f630b93a mod_pubsub: initial update to new hooks API (using binaries). mod_pubsub is still unusable with exmpp.
SVN Revision: 1809
2009-01-12 18:17:05 +00:00
Pablo Polvorin 49210e3099 Apply commit 1212 (caps handling fix), was incorrectly overwritten on 1770.
SVN Revision: 1807
2009-01-12 18:15:44 +00:00
Pablo Polvorin 96c0ff44f9 Fix typo
SVN Revision: 1806
2009-01-12 15:51:22 +00:00
Christophe Romain 56bccce713 fix previous fix misplacing (EJAB-840)
SVN Revision: 1803
2009-01-11 06:24:42 +00:00
Christophe Romain 89be1c2ede fix owners cache and fix unsubscribe permissions (EJAB-840)
SVN Revision: 1800
2009-01-11 02:05:41 +00:00
Pablo Polvorin c77f7e727b Update gen_iq_handler API, require the 'Host' argument to be in binary() format.
Fix bug in vcard user search, odbc backend.

SVN Revision: 1796
2009-01-10 16:10:12 +00:00
Christophe Romain 36080fb682 fix unsubscription of full jid subscribed node (EJAB-839)
SVN Revision: 1795
2009-01-10 13:40:38 +00:00
Pablo Polvorin 98f51dc91f Adapt to new exmpp API where get_id/1, get_lang/1, get_initiating_entity/1, get_receiving_entity/1 and get_type/1 returns binary().
SVN Revision: 1791
2009-01-09 19:18:46 +00:00
Christophe Romain d2524b20d5 minor pubsub fixes
SVN Revision: 1782
2009-01-08 18:44:11 +00:00
Christophe Romain 068c93e562 fix EJAB-701 and EJAB-836
SVN Revision: 1781
2009-01-08 17:27:47 +00:00
Pablo Polvorin e0e58711bb XML attributes as binary(). Change Node argument to binary in the following hooks:
disco_local_items, disco_local_features, disco_local_identity, disco_sm_items and 
disco_sm_identity.

SVN Revision: 1780
2009-01-08 14:54:00 +00:00
Pablo Polvorin 2cbd61f268 Fix typo in mod_roster
SVN Revision: 1773
2009-01-05 15:41:53 +00:00
Pablo Polvorin 4827db4f56 Big #jid to binary() conversion.
Internal tables (ejabberd_router, ejabberd_sm, ejabberd_hooks, mod_last, mod_roster) use binary() as storage.
Basic test using the ODBC backend.

SVN Revision: 1770
2009-01-03 15:15:38 +00:00
Christophe Romain 1a44fe29b4 PubSub: Added access-whitelist and member-affiliation features (EJAB-780)
SVN Revision: 1769
2009-01-03 00:58:18 +00:00
Christophe Romain e032a8c54f PubSub cleanup, EJAB-827 fix, EJAB-701 partial fix
SVN Revision: 1767
2009-01-03 00:29:36 +00:00
Christophe Romain 214ef31053 Improve handling of PEP sent to external contacts (EJAB-825)
SVN Revision: 1751
2008-12-23 13:58:38 +00:00
Christophe Romain 978adbbd94 Fix send_last_published_item issue when running on clustered table (EJAB-793)
SVN Revision: 1741
2008-12-20 00:01:26 +00:00
Christophe Romain e6535dcc67 Check option of the nodetree instead of checking configuration
SVN Revision: 1738
2008-12-18 13:46:30 +00:00
Pablo Polvorin d3ddf10839 mod_muc_room.erl: Fix bug in MUC invite.
SVN Revision: 1736
2008-12-17 16:24:15 +00:00
Jean-Sébastien Pédron 69805f36fa Merge from trunk (r1730 to r1734).
PR:		EJABP-1

SVN Revision: 1735
2008-12-17 13:52:44 +00:00
Jean-Sébastien Pédron 6a3436b1c4 Merge from trunk (r1709 to r1730).
Ejabberd should be usable again.

PR:		EJABP-1

SVN Revision: 1731
2008-12-16 13:16:56 +00:00
Jean-Sébastien Pédron 62f9f6e6c5 Convert to exmpp the parts in mod_pubsub recently merged from trunk.
Warning: Ejabberd is unusable because the rest of trunk hasn't been
merged yet!

PR:		EJABP-1

SVN Revision: 1730
2008-12-16 10:31:08 +00:00
Christophe Romain 96aaba738b fix get_item_name deadlock on transaction
SVN Revision: 1729
2008-12-15 19:58:53 +00:00
Jean-Sébastien Pédron f83fc51960 Replace stringprep by exmpp_stringprep.
PR:		EJABP-1

SVN Revision: 1726
2008-12-10 14:44:08 +00:00
Christophe Romain e1575e3177 fix typo bug injected in r1712
SVN Revision: 1725
2008-12-09 22:42:34 +00:00
Christophe Romain 3d28a7837d minor bugfix
SVN Revision: 1723
2008-12-09 22:09:30 +00:00
Christophe Romain 44b4c29d08 lattest pubsub merge added in Changelog
SVN Revision: 1721
2008-12-09 00:35:27 +00:00
Christophe Romain 9f2fda6060 merge to lattest trunk r1716
SVN Revision: 1720
2008-12-09 00:32:36 +00:00
Jean-Sébastien Pédron 3bfb2b5cc1 Merge from trunk (r1692 to r1709).
PR:		EJABP-1

SVN Revision: 1710
2008-12-08 12:02:27 +00:00
Jean-Sébastien Pédron 82b97b9639 Finish the conversion of mod_pubsub to Exmpp.
PR:		EJABP-1

SVN Revision: 1709
2008-12-08 11:21:32 +00:00
Jean-Sébastien Pédron d01c24bd23 Fix acl:match_rule/3 call. It takes a #jid record, not a short JID.
PR:		EJABP-1

SVN Revision: 1708
2008-12-08 11:20:21 +00:00
Jean-Sébastien Pédron 163d185776 First pass of Exmpp conversion for mod_pubsub.
CAUTION:
o  Several modules aren't converted yet.
o  Existent Mnesia tables written to disc are not updated.
o  There must be bugs, mostly because of the mix between #jid record
and short JIDs.
PR:		EJABP-1

SVN Revision: 1705
2008-12-05 15:13:09 +00:00
Jean-Sébastien Pédron 6305ddca18 Add the module and function names to the error message, when a module
crash.

SVN Revision: 1704
2008-12-05 15:08:03 +00:00
Jean-Sébastien Pédron b82b66fdf0 Update Exmpp XML parser options.
SVN Revision: 1703
2008-12-05 15:06:49 +00:00
Jean-Sébastien Pédron b425093813 Convert mod_proxy65 to exmpp.
SVN Revision: 1701
2008-12-03 14:34:43 +00:00
Jean-Sébastien Pédron f30d2b9f1c Fix two warnings about unused variables.
PR:		EJABP-1

SVN Revision: 1696
2008-12-01 15:54:57 +00:00
Jean-Sébastien Pédron 9e96043255 Merge from trunk (r1649 to r1692).
PR:		EJABP-1

SVN Revision: 1695
2008-12-01 15:53:30 +00:00
Jean-Sébastien Pédron bd300e870c Convert mod_muc to Exmpp.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1692
2008-12-01 15:01:27 +00:00
Jean-Sébastien Pédron e06f533f6b Start the exmpp application.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1691
2008-12-01 15:00:36 +00:00
Jean-Sébastien Pédron 7088ba88a9 o In store_last_info/4, fix a bug where the status was not converted to
list before calling ejabberd_odbc:escape/1.
o  In get_last_info/2, fix a bug where the status was returned as a list
instead of a binary.

SVN Revision: 1690
2008-12-01 12:16:41 +00:00
Jean-Sébastien Pédron 0313adaec6 Convert to exmpp.
PR:		EJABP-1

SVN Revision: 1663
2008-10-20 10:34:00 +00:00
Jean-Sébastien Pédron 50b1e4c36f Convert to exmpp.
The admin web interface is working but HTTP polling seems broken in the
trunk.

PR:		EJABP-1

SVN Revision: 1654
2008-10-13 15:36:43 +00:00
Jean-Sébastien Pédron a94caf218f Remove all deprecated functions from jlib.
This was accidentally committed with the merge.

PR:		EJABP-1

SVN Revision: 1651
2008-10-13 11:43:33 +00:00
Jean-Sébastien Pédron ab2b70f189 Merge from trunk (r1613 to 1649).
PR:		EJABP-1

SVN Revision: 1650
2008-10-13 10:11:19 +00:00
Jean-Sébastien Pédron 3190c0ed6c Convert to exmpp.
PR:		EJABP-1

SVN Revision: 1649
2008-10-13 09:39:58 +00:00
Jean-Sébastien Pédron 461a5eb315 Convert to exmpp.
PR:		EJABP-1

SVN Revision: 1648
2008-10-13 09:39:18 +00:00
Jean-Sébastien Pédron 01ef834b82 Remove the deprecated list of converted modules.
PR:		EJABP-1

SVN Revision: 1647
2008-10-13 09:38:34 +00:00
Jean-Sébastien Pédron 0211c8145d Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1.
PR:		EJABP-1

SVN Revision: 1646
2008-10-13 09:37:48 +00:00
Jean-Sébastien Pédron 4a9892fa15 Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the
error handling.

PR:		EJABP-1

SVN Revision: 1628
2008-10-10 15:24:47 +00:00
Jean-Sébastien Pédron 71bfefa788 Convert to exmpp.
PR:		EJABP-1

SVN Revision: 1627
2008-10-10 15:23:58 +00:00
Jean-Sébastien Pédron 071c858055 Don't start stringprep_sup.
PR:		EJABP-1

SVN Revision: 1626
2008-10-10 14:58:35 +00:00
Jean-Sébastien Pédron 0244963935 Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the
error handling.

PR:		EJABP-1

SVN Revision: 1625
2008-10-10 14:57:44 +00:00
Jean-Sébastien Pédron 3adb238b31 Fix a bug where the wrong module was called (jlib instead of exmpp_jid).
PR:		EJABP-1

SVN Revision: 1624
2008-10-10 14:41:26 +00:00
Jean-Sébastien Pédron e3100110f0 Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the
error handling.

PR:		EJABP-1

SVN Revision: 1623
2008-10-10 14:40:04 +00:00
Jean-Sébastien Pédron 5224a796cc Replace jlib:iq_to_xml/1 by exmpp_iq:iq_to_xmlel/1.
PR:		EJABP-1

SVN Revision: 1622
2008-10-10 14:38:52 +00:00
Jean-Sébastien Pédron 285b3858dd Replace jlib:*prep/1 by exmpp_stringprep:*prep/1 and change the error
handling.

PR:		EJABP-1

SVN Revision: 1621
2008-10-10 14:37:26 +00:00
Jean-Sébastien Pédron 53bea055aa Remove a remaining jlib:jid_remove_resource/1 call.
PR:		EJABP-1

SVN Revision: 1620
2008-10-10 14:36:25 +00:00
Jean-Sébastien Pédron 129b0e99cf Replace jlib:nodeprep/1 by exmpp_stringprep:nodeprep/1 and change the
error handling.

PR:		EJABP-1

SVN Revision: 1619
2008-10-10 14:35:17 +00:00
Jean-Sébastien Pédron c0e4af9ac0 Replace jlib:nameprep/1 by exmpp_stringprep:nameprep/1 and change the
error handling.

PR:		EJABP-1

SVN Revision: 1618
2008-10-10 14:33:16 +00:00
Jean-Sébastien Pédron ccd94bb734 Fix a buf where a tuple was passed to exmpp_jid:jid_to_list/1 instead of
a #jid. Now we use exmpp_jid:jid_to_list/3.

PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1617
2008-10-10 08:16:29 +00:00
Jean-Sébastien Pédron e1b3bd611d Fix a bug where legacy authentication informations were not search among
the query children but among the IQ children.

PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1616
2008-10-10 08:14:08 +00:00
Jean-Sébastien Pédron 6ab7e339bd Fix handling of unauthenticated stanzas which are not request IQ.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1615
2008-10-09 11:54:42 +00:00
Jean-Sébastien Pédron 67a87af459 Merge from trunk (r1563 to r1613).
PR:		EJABP-1

SVN Revision: 1614
2008-10-08 12:02:30 +00:00
Jean-Sébastien Pédron aaecdc4b8a Convert to exmpp.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1611
2008-10-07 12:20:09 +00:00
Jean-Sébastien Pédron 78466384c4 Convert to exmpp.
PR:		EJABP-1

SVN Revision: 1610
2008-10-07 09:55:38 +00:00
Jean-Sébastien Pédron ca7a0813b4 Fix a bug where an error stanza was not created correctly, leading to
ejabberd_c2s crash.

PR:		EJABP-1

SVN Revision: 1609
2008-10-07 09:54:53 +00:00
Jean-Sébastien Pédron bc0d8613ab Fix status handling by always using binaries: until now, we were mixing
lists and binaries in a non-working way.

PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1608
2008-10-06 15:16:09 +00:00
Jean-Sébastien Pédron 0434c1424a The Mnesia table wasn't updated when converting from an old schema.
PR:		EJABP-1

SVN Revision: 1607
2008-10-06 15:14:01 +00:00
Jean-Sébastien Pédron 3f8a303286 Convert to exmpp.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1606
2008-10-06 15:01:36 +00:00
Jean-Sébastien Pédron 5ceffdd5a7 Fix a confusion between #jid and tuples.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1604
2008-10-06 15:00:34 +00:00
Jean-Sébastien Pédron 01da93bf70 mod_privacy & friends may return an empty list.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1603
2008-10-06 14:58:45 +00:00
Jean-Sébastien Pédron 028a3c2ded Fix a bug where we were matching on #iq.type instead of #iq.kind,
resulting in bad-request sent to the client.

PR:		EJABP-1

SVN Revision: 1602
2008-10-06 14:56:36 +00:00
Jean-Sébastien Pédron 1698b8ec04 o In start/2 and stop/1, the IQ registration must use a namespace as
atom, not list.
o  The functions process_local_iq/3, process_sm_iq/3 and get_last/3
receive an #iq, not an #xmlel.
o  In store_last_info/4 and remove_user/2, add try/catch block around
exmpp_stringprep:*prep/1 uses.

SVN Revision: 1594
2008-10-02 14:59:48 +00:00
Jean-Sébastien Pédron 9e018532c8 o In #jid, when the node isn't specified, it defaults to the atom
"undefined", not an empty binary.
o  Fix a bug where we expected an #xmlelement to have only one #xmlcdata
child.

SVN Revision: 1593
2008-10-02 13:52:39 +00:00
Jean-Sébastien Pédron 24cb7cb039 exmpp_xml:get_element_by_name/2 is deprecated; use
exmpp_xml:get_element/2 instead.

SVN Revision: 1592
2008-10-02 13:34:52 +00:00
Jean-Sébastien Pédron 7c28aba6a1 Fix a bug where a JID represented as a tuple was used in a function
expecting a #jid.

PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1591
2008-10-02 13:17:49 +00:00
Jean-Sébastien Pédron 2309f9b8bc Fix multiple bugs in ODBC mods.
PR:		EJABP-1
Submitted by:	Pablo Polvorin <pablo.polvorin@process-one.net>

SVN Revision: 1589
2008-10-01 09:41:57 +00:00
Jean-Sébastien Pédron ddcb94649d Fill exmpp_xml known list with the nss/names/attrs used by this module.
SVN Revision: 1585
2008-09-29 13:19:11 +00:00
Jean-Sébastien Pédron 5f7e16eac3 Add the {autoload_known, true} flag to the XML parser options. This
allows modules to extend the known nss/names/attrs with their own data.

SVN Revision: 1584
2008-09-29 13:17:21 +00:00
Jean-Sébastien Pédron da034b3090 Fix a bug in #xmlel construction: children must be a list.
SVN Revision: 1583
2008-09-29 11:30:25 +00:00
Jean-Sébastien Pédron 12d515a8fe Convert to exmpp (not tested yet).
SVN Revision: 1582
2008-09-29 11:29:09 +00:00
Jean-Sébastien Pédron f5f3c85112 Remove compatibility code (not tested yet).
SVN Revision: 1581
2008-09-29 10:38:04 +00:00
Jean-Sébastien Pédron d8153b702a o Add try/catch block around exmpp_stringprep:*prep/1 uses.
o  Add table conversion.
o  In get_last/3, do not convert status to binary because it's already
one.

SVN Revision: 1580
2008-09-29 10:34:06 +00:00
Jean-Sébastien Pédron 9a4f5bb2d9 When the status is not specified in a presence stanza, default to an
empty binary, not an empty string; this is what mod_last expects.

SVN Revision: 1579
2008-09-29 10:31:24 +00:00
Jean-Sébastien Pédron 7624284070 Remove compatilibity code.
SVN Revision: 1578
2008-09-29 09:42:46 +00:00
Jean-Sébastien Pédron c32cbd90e8 Fix a bug in parse_xdata_submit/1 and parse_xdata_fields/2 where
exmpp_xml:get_attribute_from_list/3 was called with only 2 arguments;
this code has not been updated when exmpp_xml's API changed...

SVN Revision: 1577
2008-09-29 09:42:05 +00:00
Jean-Sébastien Pédron c068d20588 In mod_offline:
o  Remove any compatibility code: the core of Ejabberd expects new
structures.
o  Add table conversion.
o  Add try/catch block around exmpp_stringprep:*prep/1 uses.

To permit the complete removal of the compatibility code, jlib had to be
changed too: the timestamp_to_xml/1 function now returns an #xmlel.

SVN Revision: 1575
2008-09-25 10:46:00 +00:00
Jean-Sébastien Pédron c74ab439ef Convert to exmpp.
SVN Revision: 1574
2008-09-23 13:11:05 +00:00
Jean-Sébastien Pédron 44c77364ce Fix a typo in the exmpp_stringprep module name.
SVN Revision: 1573
2008-09-23 13:10:33 +00:00
Jean-Sébastien Pédron 0dbbf53fbe o Fix a misuse of exmpp_stanza:error/2: the namespace argument (the
first one) was missing.
o  Fix a bug in process_privacy_iq/4 where the #iq record was not
converted back to an #xmlel before calling ejabberd_router:route/3.

SVN Revision: 1572
2008-09-23 13:09:32 +00:00
Jean-Sébastien Pédron 052d006c88 Fix a typo in the exmpp_stringprep module name.
SVN Revision: 1571
2008-09-23 13:06:45 +00:00
Jean-Sébastien Pédron 0e91ea9e5f o Fix a bug in process_sm_iq/3 where a badmatch exception was raised
when the user didn't have a vCard.
o  Fix a bug in remove_user/2 where the exmpp_jid module was use instead
of exmpp_stringprep.

SVN Revision: 1570
2008-09-23 13:05:43 +00:00
Jean-Sébastien Pédron 5803c51633 Convert to exmpp.
SVN Revision: 1568
2008-09-22 11:18:08 +00:00
Jean-Sébastien Pédron 35a7342416 o Remove unappropriate comments in get_sm_features/5.
o  Use the '_s' variants of NS_* macros instead of a call to
atom_to_list/1 in do_route/4.
o  A call to the stringprep module was left in filter_fields/3.

SVN Revision: 1567
2008-09-22 11:17:23 +00:00
Jean-Sébastien Pédron e9d7ac68da o Fix a bug in get_in_pending_subscriptions() where the type of the
presence stanza was lost.
o  Reorganize a few lines in user_roster() to match mod_roster_odbc.

SVN Revision: 1566
2008-09-18 14:55:43 +00:00
Jean-Sébastien Pédron 56a0c8ed1d Convert to exmpp.
SVN Revision: 1565
2008-09-18 14:55:03 +00:00
Jean-Sébastien Pédron 4eaa8e19c9 Merge from trunk (r1457 to r1563).
SVN Revision: 1564
2008-09-16 14:39:57 +00:00
Jean-Sébastien Pédron 414948d822 VCard are now stored as #xmlel. Mnesia tables are converted during
startup.

SVN Revision: 1553
2008-08-27 12:39:49 +00:00
Jean-Sébastien Pédron 02e6bf8759 handle_cast({disco_response, ...}, ...) now receives an #iq record:
update the code to handle this.

SVN Revision: 1552
2008-08-27 09:46:25 +00:00
Jean-Sébastien Pédron 8baed08641 Remove a debugging io:format/2.
SVN Revision: 1551
2008-08-27 09:45:01 +00:00
Jean-Sébastien Pédron 4e39f4cab1 o Remove compatibility code. Use the atom 'undefined' in JIDs (normal
and short).
o  Add try/catch blocks where Exmpp can raise exceptions.
o  Remove some unused code.
o  Convert on-disk Mnesia database: JIDs, extra XML elements and
askmessage are concerned.
o  By default, 'askmessage' is now an empty binary instead of an empty
string, for consistency's sake.
o  Fix some bugs.

SVN Revision: 1547
2008-08-26 13:59:04 +00:00
Jean-Sébastien Pédron 9f0d79da9a o Use the new functions from jlib.
o  Remove the compatibility code. It's becoming confusing to handle every
case every where. Also, in JIDs (normal and short), the atom "undefined'
is expected, not the empty string anymore!

SVN Revision: 1546
2008-08-26 13:38:49 +00:00
Jean-Sébastien Pédron 80fcd2eb56 Remove commented-out code and use proper variable names.
SVN Revision: 1545
2008-08-26 13:00:35 +00:00
Jean-Sébastien Pédron 5aead42964 Use the new short_prepd_jid/1 function from jlib.
SVN Revision: 1544
2008-08-26 12:58:13 +00:00
Jean-Sébastien Pédron ab75683bc9 short_jid/1 and short_bare_jid/1 now produce a short JID from the
user-provided JID parts. To obtain a short JID from the STRINGPREP'd
parts, use the new short_prepd_jid/1 and short_prepd_bare_jid/1
functions.

SVN Revision: 1543
2008-08-26 12:56:45 +00:00
Jean-Sébastien Pédron d8c3aae412 Convert to the new #iq record from Exmpp.
SVN Revision: 1524
2008-08-14 13:36:11 +00:00
Jean-Sébastien Pédron 5e78c53572 Remove the compatibility layer and always call modules with the new #iq
record from Exmpp.

SVN Revision: 1523
2008-08-14 13:34:30 +00:00
Jean-Sébastien Pédron 44d3e844a3 Accept 'undefined' as a language and treat it as the empty string.
SVN Revision: 1522
2008-08-14 13:32:31 +00:00
Jean-Sébastien Pédron 85c2097ece Update to use the new names used in exmpp_jid.
SVN Revision: 1515
2008-08-06 13:51:42 +00:00
Jean-Sébastien Pédron cb20c9b0d7 Update to use the new exmpp_xml:get_attribute/{3,4} API.
SVN Revision: 1514
2008-08-06 13:46:23 +00:00
Jean-Sébastien Pédron d9a493561b Convert to exmpp.
SVN Revision: 1513
2008-08-06 13:44:58 +00:00
Jean-Sébastien Pédron 70956ece12 Convert to exmpp.
SVN Revision: 1492
2008-07-25 14:26:59 +00:00
Jean-Sébastien Pédron adaf392156 o Finish conversion to exmpp for mod_caps.
o  In ejabberd_loca, IQ response handler are now always called with
arguments in the new format.

SVN Revision: 1469
2008-07-22 14:51:19 +00:00
Jean-Sébastien Pédron 37b99639d4 Convert to exmpp.
SVN Revision: 1468
2008-07-22 14:03:11 +00:00
Jean-Sébastien Pédron a8ab6c1568 Add support for #xmlel to parse_xdata_submit/1 and friends. This fixes
the user search in mod_vcard.

SVN Revision: 1466
2008-07-21 15:54:47 +00:00
Jean-Sébastien Pédron 4a1e45070e One call to jlib:jid_to_string/1 was remaining.
SVN Revision: 1465
2008-07-21 15:53:58 +00:00
Jean-Sébastien Pédron b33ac47228 Convert to exmpp.
SVN Revision: 1464
2008-07-21 15:30:32 +00:00
Jean-Sébastien Pédron 6e91399922 Convert to exmpp.
SVN Revision: 1463
2008-07-21 15:29:52 +00:00
Jean-Sébastien Pédron 75a8be230b Prepare gen_iq_handler to pass arguments in the new format to a built-in
list of modules known to support them. Other modules will still receive
arguments in the old format.

SVN Revision: 1462
2008-07-21 15:28:44 +00:00
Jean-Sébastien Pédron 07b1210b50 Merge revisions from 1444 to revision 1457 from trunk.
SVN Revision: 1458
2008-07-17 15:33:50 +00:00
Jean-Sébastien Pédron 532e8ee228 Start conversion to exmpp. For now, only direct calls from ejabberd_c2s
are done. Calls through gen_iq_handler aren't.

SVN Revision: 1457
2008-07-17 15:26:48 +00:00
Jean-Sébastien Pédron 574dbbfd08 Merge revisions from 1434 to revision 1444 from trunk.
SVN Revision: 1445
2008-07-15 08:45:05 +00:00
Jean-Sébastien Pédron 332fb55e3a MFC:
Merge revisions from 1362 to revision 1434 from trunk.

SVN Revision: 1435
2008-07-11 12:48:27 +00:00
Jean-Sébastien Pédron 5610d00b4d Convert to exmpp. Note that this module hasn't been tested yet!
SVN Revision: 1434
2008-07-11 12:41:48 +00:00
Jean-Sébastien Pédron 8bfccb42a9 Exmpp now takes care of stanza serialization and compatible namespaces.
SVN Revision: 1433
2008-07-11 12:40:49 +00:00
Jean-Sébastien Pédron 7ca5bebab3 Convert to exmpp.
SVN Revision: 1422
2008-07-09 09:16:03 +00:00
Jean-Sébastien Pédron d5aa4be7e5 Convert #xmlelement returned by the 'c2s_stream_features' hook to
#xmlel.

SVN Revision: 1421
2008-07-09 09:14:19 +00:00
Jean-Sébastien Pédron 1a687a4f1a SASL errors are now atoms, not strings anymore.
SVN Revision: 1420
2008-07-08 15:43:52 +00:00
Jean-Sébastien Pédron 13b78b1ad2 Routing is now done with #xmlel. A warning is printed if those modules
have to route an old #xmlelement.

SVN Revision: 1406
2008-07-01 15:51:34 +00:00
Jean-Sébastien Pédron 48cf5cb84a Do not use the #iq record anymore internally. However it's still created
and passed to other modules.

SVN Revision: 1405
2008-07-01 14:25:02 +00:00
Jean-Sébastien Pédron 5317dd64d7 Change warning message.
SVN Revision: 1404
2008-07-01 14:20:20 +00:00
Jean-Sébastien Pédron a25609f66b Accept new #xmlel in functions that create #iq. A warning is printed
when these functions are called with an old #xmlelement.

SVN Revision: 1403
2008-07-01 14:19:36 +00:00
Jean-Sébastien Pédron d6e6432a46 Convert to exmpp.
SVN Revision: 1402
2008-07-01 13:34:51 +00:00
Jean-Sébastien Pédron 094fa47f9f Convert gen_iq_handler to exmpp.
SVN Revision: 1401
2008-07-01 10:21:35 +00:00
Jean-Sébastien Pédron 6f7cf2e58b Use a function to convert to old structures instead of duplicating code
inside the module.

SVN Revision: 1400
2008-07-01 10:20:01 +00:00
Jean-Sébastien Pédron b08ae07347 acl doesn't require conversion anymore.
SVN Revision: 1399
2008-07-01 09:46:57 +00:00
Jean-Sébastien Pédron ffbf8d5faa Convert acl to exmpp.
SVN Revision: 1398
2008-07-01 09:41:32 +00:00
Jean-Sébastien Pédron f55274c7fb o Use jlib:short_bare_jid/1.
o  Rewrite is_auth_packet/1 to use new formats.
o  Don't convert <presence/> before calling ejabberd_sm:set_presence/7.
o  Don't convert broadcast children, because it's an internal special
element.

SVN Revision: 1397
2008-07-01 09:17:48 +00:00
Jean-Sébastien Pédron b9074097da Forgot to convert a <presence/> from the new to the old record.
SVN Revision: 1396
2008-07-01 09:13:49 +00:00
Jean-Sébastien Pédron 83a33726ce Add function short_bare_jid/1.
SVN Revision: 1395
2008-07-01 09:12:59 +00:00
Jean-Sébastien Pédron 8c33e12616 Use the new clause of exmpp_stanza:reply_with_error/2, exmpp_iq:error/2,
exmpp_iq:error_without_original/2 and the new exmpp_jid:make_bare_jid/1.

SVN Revision: 1394
2008-07-01 08:01:06 +00:00
Jean-Sébastien Pédron 87218e1447 Convert to exmpp.
SVN Revision: 1393
2008-07-01 07:49:57 +00:00
Jean-Sébastien Pédron 06965000a5 Before doing any routing, the router print a warning if old structures
are used. Then it converts the structures to the old format and route
them. The router doesn't care about the structures format but the
conversion is necesary for code called from this module.

In C2S and S2S, no conversion is done before calling
ejabberd_router:route/3.

SVN Revision: 1392
2008-06-30 16:55:03 +00:00
Jean-Sébastien Pédron cc033b3b98 o Use the new functions from jlib.
o  Use the new exmpp_xml:node_to_list/3.

SVN Revision: 1391
2008-06-30 15:51:23 +00:00
Jean-Sébastien Pédron 290040ad9d o Add function to convert to and from old ejabberd #jid record.
o  Move function short_jid/1 from ejabberd_c2s.

SVN Revision: 1390
2008-06-30 15:49:58 +00:00
Jean-Sébastien Pédron 264e72830b Convert to exmpp.
SVN Revision: 1389
2008-06-30 14:04:31 +00:00
Jean-Sébastien Pédron d05c2ee8a1 Use -include_lib instead of -include to include exmpp.hrl. This is a
better solution than specifying the path (with -I) on erlc(1) command
line.

SVN Revision: 1388
2008-06-30 12:13:15 +00:00
Jean-Sébastien Pédron b32aba27c1 o Use the new exmpp namespace macro names.
o  Update send_element/2 to use exmpp new to_list functions.

SVN Revision: 1384
2008-06-27 13:46:08 +00:00
Jean-Sébastien Pédron 22e79490ff Convert to exmpp.
SVN Revision: 1383
2008-06-26 15:48:19 +00:00
Jean-Sébastien Pédron 1a311a30b5 o Use a macro in ?DEFAULT_NS instead of the namespace atom directly.
o  Comment DBGFSM our again.
o  Remove macro ERR_SERVICE_UNAVAILABLE.
o  In wait_for_auth and is_auth_packet, an empty resource is returned as
'undefined', not the empty string in the {auth, ...} tuple.
o  In handle_sync_event, remove a debugging printf.
o  In handle_info({route, ...}), use macro IS_PRESENCE & friends instead
of direct matching with NS_JABBER_CLIENT and name. This way, the S2S
doesn't have to change the namespace of all its incoming stanzas to
NS_JABBER_CLIENT.
o  In send_element, for stanzas under the NS_JABBER_SERVER namespace, lie
to exmpp_xml by telling it that this namespace is the default one.

SVN Revision: 1382
2008-06-26 15:47:21 +00:00
Jean-Sébastien Pédron 999f3233bb Fix short JID comparison in get_subscribed_and_online; it was using
'undefined' instead of empty strings.

SVN Revision: 1381
2008-06-25 13:27:03 +00:00
Jean-Sébastien Pédron 07651d712f Finish ejabberd_c2s conversion with the functions related to offline
stanzas.

SVN Revision: 1380
2008-06-25 12:37:45 +00:00
Jean-Sébastien Pédron 6f931ce4fd Convert all presence-related functions.
SVN Revision: 1378
2008-06-24 16:12:56 +00:00
Jean-Sébastien Pédron e93e846e16 o Use the new exmpp_stream:opening_reply/3 function in wait_for_stream/2.
o  The function terminate/3 is converted to exmpp.

SVN Revision: 1377
2008-06-24 09:44:56 +00:00
Jean-Sébastien Pédron 4e2e68a3fb The handle_info clause that treats routing order is now converted.
In-memory sets and dict still use the short JID form with empty strings
for unspecified fields. Users are able to connect to ejabberd but some
features don't seem to work proprerly.

SVN Revision: 1376
2008-06-24 08:55:24 +00:00
Jean-Sébastien Pédron e95df7999f Convert JID to the expected form outside of the C2S (empty fields must
be set to the empty string). This fixes the broken routing.

SVN Revision: 1375
2008-06-23 11:47:10 +00:00
Jean-Sébastien Pédron 2a43998444 o Change the usage of #state.lang somewhat.
o  Fix value of DefaultLang: it doesn't contain the whole serialized
attribute.
o  Use exmpp_jid:make_bare_jid/2 more.

I started to work on the second half of the module and discovered
several annoying things:
o  JID are represented in two forms: the #jid record and the
{N, D, R} tuple.
o  Sometimes, #xmlelement may contain non-#xml* tuples in their
children. This is the case for some <presence/> stanzas. Their
children are used to pass random data.
I'm less and less convicted that ejabberd_c2s can be fully converted
without starting to work on other modules.

SVN Revision: 1370
2008-06-20 14:54:59 +00:00
Jean-Sébastien Pédron 06eea52ad8 Update the svn:ignore property.
SVN Revision: 1369
2008-06-20 12:56:39 +00:00
Jean-Sébastien Pédron 389b5e6448 First bunch of modifications to use exmpp. All FSM state function are
updated. But other functions are not for now.

Users are able to connect to ejabberd but some features may not work.

SVN Revision: 1368
2008-06-20 12:52:29 +00:00
Jean-Sébastien Pédron a19f280fcc Enable the new #xmlel record.
SVN Revision: 1367
2008-06-20 12:50:20 +00:00
Jean-Sébastien Pédron e4646a6788 Add exmpp detection.
SVN Revision: 1366
2008-06-20 12:49:39 +00:00
Jean-Sébastien Pédron 58bfea2ad1 Replace the use of xml_stream by exmpp_xmlstream. exmpp_xml is
configured to produce old #xmlelement records. exmpp_xmlstream is
configured to send old xmlstreamstart tuple.

Users are able to connect to ejabberd. 

Next step: ejabberd_c2s.

SVN Revision: 1365
2008-06-19 10:23:52 +00:00
Jean-Sébastien Pédron ad4a1c2a59 Create a branch "road-to-exmpp". This is a development branch that
will receive all the changes to make ejabberd use the new "exmpp"
application.

SVN Revision: 1362
2008-06-19 08:48:45 +00:00
512 changed files with 139855 additions and 161883 deletions
-46
View File
@@ -1,46 +0,0 @@
#
# You can add personal rules in your file .git/info/exclude
*.swp
*~
\#*#
.#*
.edts
*.dump
/Makefile
/config.log
/config.status
/configure
/aclocal.m4
/contrib/extract_translations/extract_translations.beam
/*.cache
/deps/
/doc/*.aux
/doc/*.haux
/doc/*.html
/doc/*.htoc
/doc/*.idx
/doc/*.ilg
/doc/*.ind
/doc/*.log
/doc/*.out
/doc/*.pdf
/doc/*.toc
/doc/contributed_modules.tex
/doc/version.tex
/ebin/
/ejabberd.init
/ejabberdctl.example
XmppAddr.hrl
/rel/ejabberd/
/src/XmppAddr.asn1db
/src/XmppAddr.erl
/src/ejabberd.app.src
/src/eldap_filter_yecc.erl
/vars.config
/dialyzer/
/test/*.beam
/logs/
/priv/sql
/rel/ejabberd
/_build
/mnesiadb
-51
View File
@@ -1,51 +0,0 @@
language: erlang
otp_release:
- 17.1
- 17.5
services:
- riak
before_install:
#
# We need MySQL 5.6 or newer in order to get support for FULLTEXT indexes
# with InnoDB. As soon as Travis ships that version, the following lines
# (except for the "apt-get update" call) can go away.
#
# See: https://github.com/travis-ci/travis-ci/issues/1986
#
- sudo sed -i -e s/table_cache/table_open_cache/ -e /log_slow_queries/d /etc/mysql/my.cnf
- sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 5072E1F5
- sudo add-apt-repository 'deb http://repo.mysql.com/apt/ubuntu/ precise mysql-5.6'
- sudo apt-get -qq update
- sudo apt-get -qq -o Dpkg::Options::=--force-confold install mysql-server-5.6
install:
- sudo apt-get -qq install libexpat1-dev libyaml-dev libpam0g-dev libsqlite3-dev
before_script:
- mysql -u root -e "CREATE USER 'ejabberd_test'@'localhost' IDENTIFIED BY 'ejabberd_test';"
- mysql -u root -e "CREATE DATABASE ejabberd_test;"
- mysql -u root -e "GRANT ALL ON ejabberd_test.* TO 'ejabberd_test'@'localhost';"
- psql -U postgres -c "CREATE USER ejabberd_test WITH PASSWORD 'ejabberd_test';"
- psql -U postgres -c "CREATE DATABASE ejabberd_test;"
- psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE ejabberd_test TO ejabberd_test;"
script:
- ./autogen.sh
- ./configure --prefix=/tmp/ejabberd --enable-all --disable-odbc --disable-elixir
- make
- make install
- make xref
- ERL_LIBS=$PWD make test
- grep -q 'TEST COMPLETE, \([[:digit:]]*\) ok, .* of \1 ' logs/raw.log
after_script:
- find logs -name suite.log -exec cat '{}' ';'
after_failure:
- find logs -name ejabberd.log -exec cat '{}' ';'
notifications:
email: false
+5 -5
View File
@@ -4,8 +4,8 @@ with the OpenSSL library and distribute the resulting binary.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -306,9 +306,9 @@ the "copyright" line and a pointer to where the full notice is found.
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; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
-320
View File
@@ -1,320 +0,0 @@
REBAR = @ESCRIPT@ rebar
INSTALL = @INSTALL@
SED = @SED@
ERL = @ERL@
prefix = @prefix@
exec_prefix = @exec_prefix@
DESTDIR =
# /etc/ejabberd/
ETCDIR = $(DESTDIR)@sysconfdir@/ejabberd
# /bin/
BINDIR = $(DESTDIR)@bindir@
# /sbin/
SBINDIR = $(DESTDIR)@sbindir@
# /lib/
LIBDIR = $(DESTDIR)@libdir@
# /lib/ejabberd/
EJABBERDDIR = $(DESTDIR)@libdir@/ejabberd
# /share/doc/ejabberd
PACKAGE_TARNAME = @PACKAGE_TARNAME@
datarootdir = @datarootdir@
DOCDIR = $(DESTDIR)@docdir@
# /usr/lib/ejabberd/ebin/
BEAMDIR = $(EJABBERDDIR)/ebin
# /usr/lib/ejabberd/include/
INCLUDEDIR = $(EJABBERDDIR)/include
# /usr/lib/ejabberd/priv/
PRIVDIR = $(EJABBERDDIR)/priv
# /usr/lib/ejabberd/priv/bin
PBINDIR = $(PRIVDIR)/bin
# /usr/lib/ejabberd/priv/lib
SODIR = $(PRIVDIR)/lib
# /usr/lib/ejabberd/priv/msgs
MSGSDIR = $(PRIVDIR)/msgs
# /usr/lib/ejabberd/priv/sql
SQLDIR = $(PRIVDIR)/sql
# /var/lib/ejabberd/
SPOOLDIR = $(DESTDIR)@localstatedir@/lib/ejabberd
# /var/lock/ejabberdctl
CTLLOCKDIR = $(DESTDIR)@localstatedir@/lock/ejabberdctl
# /var/lib/ejabberd/.erlang.cookie
COOKIEFILE = $(SPOOLDIR)/.erlang.cookie
# /var/log/ejabberd/
LOGDIR = $(DESTDIR)@localstatedir@/log/ejabberd
INSTALLUSER=@INSTALLUSER@
# if no user was enabled, don't set privileges or ownership
ifeq ($(INSTALLUSER),)
O_USER=
G_USER=
CHOWN_COMMAND=echo
CHOWN_OUTPUT=/dev/null
INIT_USER=root
else
O_USER=-o $(INSTALLUSER)
G_USER=-g $(INSTALLUSER)
CHOWN_COMMAND=chown
CHOWN_OUTPUT=&1
INIT_USER=$(INSTALLUSER)
endif
all: deps src
deps: deps/.got
deps/.got:
rm -rf deps/.got
rm -rf deps/.built
$(REBAR) get-deps && :> deps/.got
deps/.built: deps/.got
$(REBAR) compile && :> deps/.built
src: deps/.built
$(REBAR) skip_deps=true compile
update:
rm -rf deps/.got
rm -rf deps/.built
$(REBAR) update-deps && :> deps/.got
xref: all
$(REBAR) skip_deps=true xref
translations:
contrib/extract_translations/prepare-translation.sh -updateall
edoc:
$(ERL) -noinput +B -eval \
'case edoc:application(ejabberd, ".", []) of ok -> halt(0); error -> halt(1) end.'
spec:
$(ERL) -noinput +B -pa ebin -pa deps/*/ebin -eval \
'case xml_gen:compile("tools/xmpp_codec.spec") of ok -> halt(0); _ -> halt(1) end.'
TO_DEST=$(foreach path,$(1),$(if $(filter deps/%,$(path)),$(patsubst deps/%,$(LIBDIR)/%,$(path)),$(patsubst %,$(LIBDIR)/ejabberd/%,$(path))))
FILTER_DIRS=$(foreach path,$(1),$(if $(wildcard $(path)/*),,$(path)))
FILES_WILDCARD=$(call FILTER_DIRS,$(foreach w,$(1),$(wildcard $(w))))
DEPS_FILES:=$(call FILES_WILDCARD,deps/*/ebin/*.beam deps/*/ebin/*.app deps/*/priv/* deps/*/priv/lib/* deps/*/priv/bin/* deps/*/include/*.hrl)
DEPS_FILES_FILTERED:=$(filter-out %/epam,$(DEPS_FILES))
DEPS_DIRS:=$(sort deps/ $(wildcard deps/*) $(dir $(DEPS_FILES)))
MAIN_FILES:=$(filter-out %/configure.beam,$(call FILES_WILDCARD,ebin/*.beam ebin/*.app priv/msgs/*.msg priv/lib/* include/*.hrl))
MAIN_DIRS:=$(sort $(dir $(MAIN_FILES)))
define COPY_template
$(call TO_DEST,$(1)): $(1) $(call TO_DEST,$(dir $(1))) ; $$(INSTALL) -m 644 $(1) $(call TO_DEST,$(1))
endef
$(foreach file,$(DEPS_FILES_FILTERED) $(MAIN_FILES),$(eval $(call COPY_template,$(file))))
$(call TO_DEST,$(MAIN_DIRS) $(DEPS_DIRS)):
$(INSTALL) -d $@
$(call TO_DEST,deps/p1_pam/priv/bin/epam): $(LIBDIR)/%: deps/% $(call TO_DEST,deps/p1_pam/priv/bin/)
$(INSTALL) -m 750 $(O_USER) $< $@
copy-files: $(call TO_DEST,$(DEPS_FILES) $(MAIN_FILES))
install: all copy-files
#
# Configuration files
$(INSTALL) -d -m 750 $(G_USER) $(ETCDIR)
[ -f $(ETCDIR)/ejabberd.yml ] \
&& $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(ETCDIR)/ejabberd.yml-new \
|| $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(ETCDIR)/ejabberd.yml
$(SED) -e "s*{{rootdir}}*@prefix@*" \
-e "s*{{installuser}}*@INSTALLUSER@*" \
-e "s*{{bindir}}*@bindir@*" \
-e "s*{{libdir}}*@libdir@*" \
-e "s*{{sysconfdir}}*@sysconfdir@*" \
-e "s*{{localstatedir}}*@localstatedir@*" \
-e "s*{{docdir}}*@docdir@*" \
-e "s*{{erl}}*@ERL@*" ejabberdctl.template \
> ejabberdctl.example
[ -f $(ETCDIR)/ejabberdctl.cfg ] \
&& $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(ETCDIR)/ejabberdctl.cfg-new \
|| $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(ETCDIR)/ejabberdctl.cfg
$(INSTALL) -b -m 644 $(G_USER) inetrc $(ETCDIR)/inetrc
#
# Administration script
[ -d $(SBINDIR) ] || $(INSTALL) -d -m 755 $(SBINDIR)
$(INSTALL) -m 550 $(G_USER) ejabberdctl.example $(SBINDIR)/ejabberdctl
# Elixir binaries
[ -d $(BINDIR) ] || $(INSTALL) -d -m 755 $(BINDIR)
[ -f deps/elixir/bin/iex ] && $(INSTALL) -m 550 $(G_USER) deps/elixir/bin/iex $(BINDIR)/iex || true
[ -f deps/elixir/bin/elixir ] && $(INSTALL) -m 550 $(G_USER) deps/elixir/bin/elixir $(BINDIR)/elixir || true
[ -f deps/elixir/bin/mix ] && $(INSTALL) -m 550 $(G_USER) deps/elixir/bin/mix $(BINDIR)/mix || true
#
# Init script
$(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*" \
-e "s*@installuser@*$(INIT_USER)*" ejabberd.init.template \
> ejabberd.init
chmod 755 ejabberd.init
# Install Elixir and Elixir dependancies
-$(INSTALL) -m 644 deps/*/lib/*/ebin/*.app $(BEAMDIR)
-$(INSTALL) -m 644 deps/*/lib/*/ebin/*.beam $(BEAMDIR)
rm -f $(BEAMDIR)/configure.beam
#
# Binary C programs
$(INSTALL) -d $(PBINDIR)
$(INSTALL) -m 750 $(O_USER) tools/captcha.sh $(PBINDIR)
#
# Copy lite.sql
[ -d deps/sqlite3 ] && $(INSTALL) -d $(SQLDIR) || true
[ -d deps/sqlite3 ] && $(INSTALL) -m 644 sql/lite.sql $(SQLDIR) || true
#
# Spool directory
$(INSTALL) -d -m 750 $(O_USER) $(SPOOLDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(SPOOLDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(SPOOLDIR)
[ ! -f $(COOKIEFILE) ] || { $(CHOWN_COMMAND) @INSTALLUSER@ $(COOKIEFILE) >$(CHOWN_OUTPUT) ; chmod 400 $(COOKIEFILE) ; }
#
# ejabberdctl lock directory
$(INSTALL) -d -m 750 $(O_USER) $(CTLLOCKDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(CTLLOCKDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(CTLLOCKDIR)
#
# Log directory
$(INSTALL) -d -m 750 $(O_USER) $(LOGDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(LOGDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(LOGDIR)
#
# Documentation
$(INSTALL) -d $(DOCDIR)
[ -f doc/guide.html ] \
&& $(INSTALL) -m 644 doc/guide.html $(DOCDIR) \
|| echo "Documentation not included in sources"
$(INSTALL) -m 644 COPYING $(DOCDIR)
uninstall: uninstall-binary
uninstall-binary:
rm -f $(SBINDIR)/ejabberdctl
rm -f $(BINDIR)/iex
rm -f $(BINDIR)/elixir
rm -f $(BINDIR)/mix
rm -fr $(DOCDIR)
rm -f $(BEAMDIR)/*.beam
rm -f $(BEAMDIR)/*.app
rm -fr $(BEAMDIR)
rm -f $(INCLUDEDIR)/*.hrl
rm -fr $(INCLUDEDIR)
rm -fr $(PBINDIR)
rm -f $(SODIR)/*.so
rm -fr $(SODIR)
rm -f $(MSGSDIR)/*.msgs
rm -fr $(MSGSDIR)
rm -f $(SQLDIR)/*.sql
rm -fr $(SQLDIR)
rm -fr $(PRIVDIR)
rm -fr $(EJABBERDDIR)
uninstall-all: uninstall-binary
rm -rf $(ETCDIR)
rm -rf $(EJABBERDDIR)
rm -rf $(SPOOLDIR)
rm -rf $(CTLLOCKDIR)
rm -rf $(LOGDIR)
clean:
rm -rf deps/.got
rm -rf deps/.built
rm -rf test/*.beam
$(REBAR) clean
clean-rel:
rm -rf rel/ejabberd
distclean: clean clean-rel
rm -f config.status
rm -f config.log
rm -rf autom4te.cache
rm -rf deps
rm -rf ebin
rm -f Makefile
rm -f vars.config
rm -f src/ejabberd.app.src
[ ! -f ../ChangeLog ] || rm -f ../ChangeLog
rel: all
$(REBAR) generate
TAGS:
etags *.erl
Makefile: Makefile.in
deps := $(wildcard deps/*/ebin)
dialyzer/erlang.plt:
@mkdir -p dialyzer
@dialyzer --build_plt --output_plt dialyzer/erlang.plt \
-o dialyzer/erlang.log --apps kernel stdlib sasl crypto \
public_key ssl mnesia inets odbc tools compiler erts webtool \
runtime_tools asn1 observer xmerl et gs wx syntax_tools; \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
dialyzer/deps.plt:
@mkdir -p dialyzer
@dialyzer --build_plt --output_plt dialyzer/deps.plt \
-o dialyzer/deps.log $(deps); \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
dialyzer/ejabberd.plt:
@mkdir -p dialyzer
@dialyzer --build_plt --output_plt dialyzer/ejabberd.plt \
-o dialyzer/ejabberd.log ebin; \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
erlang_plt: dialyzer/erlang.plt
@dialyzer --plt dialyzer/erlang.plt --check_plt -o dialyzer/erlang.log; \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
deps_plt: dialyzer/deps.plt
@dialyzer --plt dialyzer/deps.plt --check_plt -o dialyzer/deps.log; \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
ejabberd_plt: dialyzer/ejabberd.plt
@dialyzer --plt dialyzer/ejabberd.plt --check_plt -o dialyzer/ejabberd.log; \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
dialyzer: erlang_plt deps_plt ejabberd_plt
@dialyzer --plts dialyzer/*.plt --no_check_plt \
--get_warnings -o dialyzer/error.log ebin; \
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
test:
@echo "************************** NOTICE ***************************************"
@cat test/README
@echo "*************************************************************************"
@cd priv && ln -sf ../sql
$(REBAR) skip_deps=true ct
quicktest:
$(REBAR) skip_deps=true ct suites=elixir
.PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean rel \
install uninstall uninstall-binary uninstall-all translations deps test spec \
quicktest erlang_plt deps_plt ejabberd_plt
+30 -151
View File
@@ -1,172 +1,51 @@
ejabberd Community Edition [![Build Status](https://travis-ci.org/processone/ejabberd.svg?branch=master)](https://travis-ci.org/processone/ejabberd)
=========================================
ejabberd is a distributed, fault-tolerant technology that allows the creation
of large-scale instant messaging applications. The server can reliably support
thousands of simultaneous users on a single node and has been designed to
provide exceptional standards of fault tolerance. As an open source
technology, based on industry-standards, ejabberd can be used to build bespoke
solutions very cost effectively.
Key Features
------------
- **Cross-platform**
ejabberd runs under Microsoft Windows and Unix-derived systems such as
Linux, FreeBSD and NetBSD.
- **Distributed**
You can run ejabberd on a cluster of machines and all of them will serve the
same XMPP domain(s). When you need more capacity you can simply add a new
cheap node to your cluster. Accordingly, you do not need to buy an expensive
high-end machine to support tens of thousands concurrent users.
- **Fault-tolerant**
You can deploy an ejabberd cluster so that all the information required for
a properly working service will be replicated permanently on all nodes. This
means that if one of the nodes crashes, the others will continue working
without disruption. In addition, nodes also can be added or replaced on
the fly.
- **Administrator-friendly**
ejabberd is built on top of the Open Source Erlang. As a result you do not
need to install an external database, an external web server, amongst others
because everything is already included, and ready to run out of the box.
Other administrator benefits include:
- Comprehensive documentation.
- Straightforward installers for Linux and Mac OS X.
- Web administration.
- Shared roster groups.
- Command line administration tool.
- Can integrate with existing authentication mechanisms.
- Capability to send announce messages.
- **Internationalized**
ejabberd leads in internationalization. Hence it is very well suited in a
globalized world. Related features are:
- Translated to 25 languages.
- Support for IDNA.
- **Open Standards**
ejabberd is the first Open Source Jabber server claiming to fully comply to
the XMPP standard.
- Fully XMPP-compliant.
- XML-based protocol.
- Many protocols supported.
Additional Features
-------------------
Moreover, ejabberd comes with a wide range of other state-of-the-art features:
- **Modularity**
- Load only the modules you want.
- Extend ejabberd with your own custom modules.
- **Security**
- SASL and STARTTLS for c2s and s2s connections.
- STARTTLS and Dialback s2s connections.
- Web Admin accessible via HTTPS secure access.
- **Databases**
- Internal database for fast deployment (Mnesia).
- Native MySQL support.
- Native PostgreSQL support.
- ODBC data storage support.
- Microsoft SQL Server support.
- **Authentication**
- Internal authentication.
- PAM, LDAP and ODBC.
- External authentication script.
- **Others**
- Support for virtual hosting.
- Compressing XML streams with Stream Compression (XEP-0138).
- Statistics via Statistics Gathering (XEP-0039).
- IPv6 support both for c2s and s2s connections.
- Multi-User Chat module with support for clustering and HTML logging.
- Users Directory based on users vCards.
- Publish-Subscribe component with support for Personal Eventing.
- Support for web clients: HTTP Polling and HTTP Binding (BOSH).
- IRC transport.
- Component support: interface with networks such as AIM, ICQ and MSN.
ejabberd - High-Performance Enterprise Instant Messaging Server
Quickstart guide
----------------
### 0. Requirements
0. Requirements
To compile ejabberd you need:
- GNU Make.
- GCC.
- Libexpat 1.95 or higher.
- Libyaml 0.1.4 or higher.
- Erlang/OTP 17.1 or higher.
- GNU Make
- GCC
- Erlang/OTP R12B-5 or higher.
- exmpp 0.9.5 or higher
- OpenSSL 0.9.8 or higher, for STARTTLS, SASL and SSL encryption.
- Zlib 1.2.3 or higher, for Stream Compression support (XEP-0138). Optional.
- Zlib 1.2.3 or higher, for Stream Compression support
(XEP-0138). Optional.
- Erlang mysql library. Optional. MySQL authentication/storage.
- Erlang pgsql library. Optional. PostgreSQL authentication/storage.
- PAM library. Optional. For Pluggable Authentication Modules (PAM).
- GNU Iconv 1.8 or higher, for the IRC Transport (mod_irc). Optional. Not
needed on systems with GNU Libc.
- ESASL library. Optional. For SASL GSSAPI authentication.
- ImageMagick's Convert program. Optional. For CAPTCHA challenges.
### 1. Compile and install on *nix systems
1. Compile and install on *nix systems
To compile ejabberd, execute the following commands. The first one is only
necessary if your source tree didn't come with a `configure` script.
To compile ejabberd, go to the directory src/ and execute the commands:
./configure
make
./autogen.sh
./configure
make
To install ejabberd, run this command with system administrator rights
(root user):
To install ejabberd, run this command with system administrator rights (root
user):
sudo make install
sudo make install
These commands will:
- Install the configuration files in `/etc/ejabberd/`
- Install ejabberd binary, header and runtime files in `/lib/ejabberd/`
- Install the administration script: `/sbin/ejabberdctl`
- Install ejabberd documentation in `/share/doc/ejabberd/`
- Create a spool directory: `/var/lib/ejabberd/`
- Create a directory for log files: `/var/log/ejabberd/`
- Install the configuration files in /etc/ejabberd/
- Install ejabberd binary, header and runtime files in /lib/ejabberd/
- Install the administration script: /sbin/ejabberdctl
- Install ejabberd documentation in /share/doc/ejabberd/
- Create a spool directory: /var/lib/ejabberd/
- Create a directory for log files: /var/log/ejabberd/
### 2. Start ejabberd
2. Start ejabberd
You can use the `ejabberdctl` command line administration script to
You can use the ejabberdctl command line administration script to
start and stop ejabberd. For example:
ejabberdctl start
ejabberdctl start
For detailed information please refer to the ejabberd Installation and
Operation Guide available online and in the `doc` directory of the source
tarball.
Development
-----------
In order to assist in the development of ejabberd, and particularly the
execution of the test suite, a Vagrant environment is available at
https://github.com/processone/ejabberd-vagrant-dev.
To start ejabberd in development mode from the repository directory, you can
type a command like:
EJABBERD_CONFIG_PATH=ejabberd.yml erl -pa ebin -pa deps/*/ebin -pa test -s ejabberd
Links
-----
- Documentation: http://docs.ejabberd.im
- Community site: https://www.ejabberd.im
- ejabberd commercial offering and support: https://www.process-one.net/en/ejabberd
For detailed information please refer to the
ejabberd Installation and Operation Guide
-1
View File
@@ -1 +0,0 @@
README
-3
View File
@@ -1,3 +0,0 @@
# generate a new autoconf
aclocal -I m4
autoconf -f
-10
View File
@@ -1,10 +0,0 @@
use Mix.Config
# This is standard path in the context of ejabberd release
config :ejabberd,
file: "config/ejabberd.yml",
log_path: 'log/ejabberd.log'
# Customize Mnesia directory:
config :mnesia,
dir: 'mnesiadb/'
-280
View File
@@ -1,280 +0,0 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.53)
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 0.0` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
REQUIRE_ERLANG_MIN="6.1 (Erlang/OTP 17.1)"
REQUIRE_ERLANG_MAX="9.0.0 (No Max)"
AC_CONFIG_MACRO_DIR([m4])
# Checks for programs.
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PROG_SED
if test "x$GCC" = "xyes"; then
CFLAGS="$CFLAGS -Wall"
fi
# Checks Erlang runtime and compiler
AC_ARG_WITH(erlang,
AC_HELP_STRING([--with-erlang=dir],
[search for erlang in dir]),
[if test "$withval" = "yes" -o "$withval" = "no" -o "X$with_erlang" = "X"; then
extra_erl_path=""
else
extra_erl_path="$with_erlang:$with_erlang/bin:"
fi
])
AC_PATH_TOOL(ERL, erl, , [${extra_erl_path}$PATH])
AC_PATH_TOOL(ERLC, erlc, , [${extra_erl_path}$PATH])
AC_ERLANG_NEED_ERL
AC_ERLANG_NEED_ERLC
AC_ARG_ENABLE(erlang-version-check,
[AC_HELP_STRING([--enable-erlang-version-check],
[Check Erlang/OTP version @<:@default=yes@:>@])])
case "$enable_erlang_version_check" in
yes|'')
ERLANG_VERSION_CHECK([$REQUIRE_ERLANG_MIN],[$REQUIRE_ERLANG_MAX])
;;
no)
ERLANG_VERSION_CHECK([$REQUIRE_ERLANG_MIN],[$REQUIRE_ERLANG_MAX],[warn])
;;
esac
# Checks and sets ERLANG_ROOT_DIR and ERLANG_LIB_DIR variable
AC_ERLANG_SUBST_ROOT_DIR
# AC_ERLANG_SUBST_LIB_DIR
#locating escript
AC_PATH_PROG([ESCRIPT], [escript], [], [$ERLANG_ROOT_DIR/bin])
#locating make
AC_CHECK_PROG([MAKE], [make], [make], [])
if test "x$ESCRIPT" = "x"; then
AC_MSG_ERROR(['escript' was not found])
fi
if test "x$MAKE" = "x"; then
AC_MSG_ERROR(['make' was not found])
fi
# Change default prefix
AC_PREFIX_DEFAULT(/)
AC_ARG_ENABLE(hipe,
[AC_HELP_STRING([--enable-hipe], [compile natively with HiPE, not recommended (default: no)])],
[case "${enableval}" in
yes) hipe=true ;;
no) hipe=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-hipe) ;;
esac],[hipe=false])
AC_ARG_ENABLE(roster_gateway_workaround,
[AC_HELP_STRING([--enable-roster-gateway-workaround], [turn on workaround for processing gateway subscriptions (default: no)])],
[case "${enableval}" in
yes) roster_gateway_workaround=true ;;
no) roster_gateway_workaround=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-roster-gateway-workaround) ;;
esac],[roster_gateway_workaround=false])
AC_ARG_ENABLE(transient_supervisors,
[AC_HELP_STRING([--disable-transient-supervisors], [disable Erlang supervision for transient processes (default: no)])],
[case "${enableval}" in
yes) transient_supervisors=true ;;
no) transient_supervisors=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-transient_supervisors) ;;
esac],[transient_supervisors=true])
AC_ARG_ENABLE(full_xml,
[AC_HELP_STRING([--enable-full-xml], [use XML features in XMPP stream (ex: CDATA) (default: no, requires XML compliant clients)])],
[case "${enableval}" in
yes) full_xml=true ;;
no) full_xml=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-full-xml) ;;
esac],[full_xml=false])
AC_ARG_ENABLE(mssql,
[AC_HELP_STRING([--enable-mssql], [use Microsoft SQL Server database (default: no, requires --enable-odbc)])],
[case "${enableval}" in
yes) db_type=mssql ;;
no) db_type=generic ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mssql) ;;
esac],[db_type=generic])
AC_ARG_ENABLE(all,
[AC_HELP_STRING([--enable-all], [same as --enable-nif --enable-odbc --enable-mysql --enable-pgsql --enable-sqlite --enable-pam --enable-zlib --enable-riak --enable-redis --enable-elixir --enable-iconv --enable-debug --enable-lager --enable-tools (useful for Dialyzer checks, default: no)])],
[case "${enableval}" in
yes) nif=true odbc=true mysql=true pgsql=true sqlite=true pam=true zlib=true riak=true redis=true elixir=true iconv=true debug=true lager=true tools=true ;;
no) nif=false odbc=false mysql=false pgsql=false sqlite=false pam=false zlib=false riak=false redis=false elixir=false iconv=false debug=false lager=false tools=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-all) ;;
esac],[])
AC_ARG_ENABLE(tools,
[AC_HELP_STRING([--enable-tools], [build development tools (default: no)])],
[case "${enableval}" in
yes) tools=true ;;
no) tools=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-tools) ;;
esac],[if test "x$tools" = "x"; then tools=false; fi])
AC_ARG_ENABLE(nif,
[AC_HELP_STRING([--enable-nif], [replace some functions with C equivalents. Requires Erlang R13B04 or higher (default: no)])],
[case "${enableval}" in
yes) nif=true ;;
no) nif=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-nif) ;;
esac],[if test "x$nif" = "x"; then nif=false; fi])
AC_ARG_ENABLE(odbc,
[AC_HELP_STRING([--enable-odbc], [enable pure ODBC support (default: no)])],
[case "${enableval}" in
yes) odbc=true ;;
no) odbc=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-odbc) ;;
esac],[if test "x$odbc" = "x"; then odbc=false; fi])
AC_ARG_ENABLE(mysql,
[AC_HELP_STRING([--enable-mysql], [enable MySQL support (default: no)])],
[case "${enableval}" in
yes) mysql=true ;;
no) mysql=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mysql) ;;
esac],[if test "x$mysql" = "x"; then mysql=false; fi])
AC_ARG_ENABLE(pgsql,
[AC_HELP_STRING([--enable-pgsql], [enable PostgreSQL support (default: no)])],
[case "${enableval}" in
yes) pgsql=true ;;
no) pgsql=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pgsql) ;;
esac],[if test "x$pgsql" = "x"; then pgsql=false; fi])
AC_ARG_ENABLE(sqlite,
[AC_HELP_STRING([--enable-sqlite], [enable SQLite support (default: no)])],
[case "${enableval}" in
yes) sqlite=true ;;
no) sqlite=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-sqlite) ;;
esac],[if test "x$sqlite" = "x"; then sqlite=false; fi])
AC_ARG_ENABLE(pam,
[AC_HELP_STRING([--enable-pam], [enable PAM support (default: no)])],
[case "${enableval}" in
yes) pam=true ;;
no) pam=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pam) ;;
esac],[if test "x$pam" = "x"; then pam=false; fi])
AC_ARG_ENABLE(zlib,
[AC_HELP_STRING([--enable-zlib], [enable Stream Compression (XEP-0138) using zlib (default: yes)])],
[case "${enableval}" in
yes) zlib=true ;;
no) zlib=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-zlib) ;;
esac],[if test "x$zlib" = "x"; then zlib=true; fi])
AC_ARG_ENABLE(riak,
[AC_HELP_STRING([--enable-riak], [enable Riak support (default: no)])],
[case "${enableval}" in
yes) riak=true ;;
no) riak=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-riak) ;;
esac],[if test "x$riak" = "x"; then riak=false; fi])
AC_ARG_ENABLE(redis,
[AC_HELP_STRING([--enable-redis], [enable Redis support (default: no)])],
[case "${enableval}" in
yes) redis=true ;;
no) redis=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-redis) ;;
esac],[if test "x$redis" = "x"; then redis=false; fi])
AC_ARG_ENABLE(elixir,
[AC_HELP_STRING([--enable-elixir], [enable Elixir support (default: no)])],
[case "${enableval}" in
yes) elixir=true ;;
no) elixir=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-elixir) ;;
esac],[if test "x$elixir" = "x"; then elixir=false; fi])
AC_ARG_ENABLE(iconv,
[AC_HELP_STRING([--enable-iconv], [enable iconv support (default: yes)])],
[case "${enableval}" in
yes) iconv=true ;;
no) iconv=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-iconv) ;;
esac],[if test "x$iconv" = "x"; then iconv=true; fi])
AC_ARG_ENABLE(debug,
[AC_HELP_STRING([--enable-debug], [enable debug information (default: yes)])],
[case "${enableval}" in
yes) debug=true ;;
no) debug=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
esac],[if test "x$debug" = "x"; then debug=true; fi])
AC_ARG_ENABLE(lager,
[AC_HELP_STRING([--enable-lager], [enable lager support (default: yes)])],
[case "${enableval}" in
yes) lager=true ;;
no) lager=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-lager) ;;
esac],[if test "x$lager" = "x"; then lager=true; fi])
AC_CONFIG_FILES([Makefile
vars.config
src/ejabberd.app.src])
ENABLEUSER=""
AC_ARG_ENABLE(user,
[AS_HELP_STRING([--enable-user[[[[=USER]]]]], [allow this system user to start ejabberd (default: no)])],
[case "${enableval}" in
yes) ENABLEUSER=`whoami` ;;
no) ENABLEUSER="" ;;
*) ENABLEUSER=$enableval
esac],
[])
if test "$ENABLEUSER" != ""; then
echo "allow this system user to start ejabberd: $ENABLEUSER"
AC_SUBST([INSTALLUSER], [$ENABLEUSER])
fi
ERLANG_DEPRECATED_TYPES_CHECK
if test "$sqlite" = "true"; then
AX_LIB_SQLITE3([3.6.19])
if test "x$SQLITE3_VERSION" = "x"; then
AC_MSG_ERROR(SQLite3 library >= 3.6.19 was not found)
fi
fi
AC_SUBST(hipe)
AC_SUBST(roster_gateway_workaround)
AC_SUBST(transient_supervisors)
AC_SUBST(full_xml)
AC_SUBST(nif)
AC_SUBST(db_type)
AC_SUBST(odbc)
AC_SUBST(mysql)
AC_SUBST(pgsql)
AC_SUBST(sqlite)
AC_SUBST(pam)
AC_SUBST(zlib)
AC_SUBST(riak)
AC_SUBST(redis)
AC_SUBST(elixir)
AC_SUBST(iconv)
AC_SUBST(debug)
AC_SUBST(lager)
AC_SUBST(tools)
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
AC_OUTPUT
+5
View File
@@ -0,0 +1,5 @@
% List of ejabberd-modules to add for ejabberd packaging (source archive and installer)
%
% HTTP-binding:
%https://svn.process-one.net/ejabberd-modules/http_bind/trunk
%https://svn.process-one.net/ejabberd-modules/mod_http_fileserver/trunk
@@ -88,16 +88,6 @@ parse_form(Dir, File, Form, Used) ->
[_, {string, Line, Str}]
} ->
process_string(Dir, File, Line, Str, Used);
{call,
_,
{remote, _, {atom, _, translate}, {atom, _, translate}},
[_,
{bin,_,
[{bin_element,_,
{string,Line,Str},
default,default}]}]
} ->
process_string(Dir, File, Line, Str, Used);
{call,
_,
{remote, _, {atom, _, translate}, {atom, _, translate}},
@@ -291,14 +281,14 @@ build_additional_translators(List) ->
List).
print_translation(File, Line, Str, StrT) ->
StrQ = ejabberd_regexp:greplace(list_to_binary(Str), <<"\\\"">>, <<"\\\\\"">>),
StrTQ = ejabberd_regexp:greplace(list_to_binary(StrT), <<"\\\"">>, <<"\\\\\"">>),
StrQ = re:replace(Str, "\\\"", "\\\\\\\"", [global, {return, list}]),
StrTQ = re:replace(StrT, "\\\"", "\\\\\\\"", [global, {return, list}]),
io:format("#: ~s:~p~nmsgid \"~s\"~nmsgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]).
print_translation_obsolete(Str, StrT) ->
File = "unknown.erl",
Line = 1,
StrQ = ejabberd_regexp:greplace(Str, "\\\"", "\\\\\""),
StrTQ = ejabberd_regexp:greplace(StrT, "\\\"", "\\\\\""),
StrQ = re:replace(Str, "\\\"", "\\\\\\\"", [global, {return, list}]),
StrTQ = re:replace(StrT, "\\\"", "\\\\\\\"", [global, {return, list}]),
io:format("#: ~s:~p~n#~~ msgid \"~s\"~n#~~ msgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]).
@@ -15,14 +15,13 @@ prepare_dirs ()
ERL=`which erl`
EJA_SRC_DIR=$EJA_DIR/src/
EJA_MSGS_DIR=$EJA_DIR/priv/msgs/
EJA_MSGS_DIR=$EJA_SRC_DIR/msgs/
EXTRACT_DIR=$EJA_DIR/contrib/extract_translations/
EXTRACT_ERL=$EXTRACT_DIR/extract_translations.erl
EXTRACT_BEAM=$EXTRACT_DIR/extract_translations.beam
SRC_DIR=$RUN_DIR/src
EBIN_DIR=$RUN_DIR/ebin
MSGS_DIR=$EJA_DIR/priv/msgs
MSGS_DIR=$SRC_DIR/msgs
if !([[ -n $EJA_DIR ]])
then
@@ -92,7 +91,7 @@ extract_lang_all ()
cd $MSGS_DIR
for i in $( ls *.msg ) ; do
MISSING=`cat $i.translate | grep "\", \"\"}." | wc -l`
LANGUAGE=`grep "X-Language:" $i.translate | sed 's/% Language: //g'`
LANGUAGE=`grep "Language:" $i.translate | sed 's/% Language: //g'`
LASTAUTH=`grep "Author:" $i.translate | head -n 1 | sed 's/% Author: //g'`
echo -e "$i\t$MISSING\t$LANGUAGE\t$LASTAUTH"
done
@@ -156,8 +155,7 @@ extract_lang_srcmsg2po ()
echo $MSGS_PATH
cd $SRC_DIR
$ERL -pa $EXTRACT_DIR -pa $EBIN_DIR -pa $EJA_SRC_DIR -pa /lib/ejabberd/include -noinput -noshell -s extract_translations -s init stop -extra -srcmsg2po . $MSGS_PATH >$PO_PATH.1
$ERL -pa $EXTRACT_DIR -pa $SRC_DIR -pa $EJA_SRC_DIR -pa /lib/ejabberd/include -noinput -noshell -s extract_translations -s init stop -extra -srcmsg2po . $MSGS_PATH >$PO_PATH.1
sed -e 's/ \[\]$/ \"\"/g;' $PO_PATH.1 > $PO_PATH.2
msguniq --sort-by-file $PO_PATH.2 --output-file=$PO_PATH
@@ -176,7 +174,7 @@ extract_lang_src2pot ()
echo "" >>$MSGS_PATH
cd $SRC_DIR
$ERL -pa $EXTRACT_DIR -pa $EBIN_DIR -pa $EJA_SRC_DIR -pa /lib/ejabberd/include -noinput -noshell -s extract_translations -s init stop -extra -srcmsg2po . $MSGS_PATH >$POT_PATH.1
$ERL -pa $EXTRACT_DIR -pa $SRC_DIR -pa $EJA_SRC_DIR -pa /lib/ejabberd/include -noinput -noshell -s extract_translations -s init stop -extra -srcmsg2po . $MSGS_PATH >$POT_PATH.1
sed -e 's/ \[\]$/ \"\"/g;' $POT_PATH.1 > $POT_PATH.2
#msguniq --sort-by-file $POT_PATH.2 $EJA_MSGS_DIR --output-file=$POT_PATH
@@ -230,8 +228,7 @@ extract_lang_po2msg ()
msgattrib $PO_PATH --translated --no-fuzzy --no-obsolete --no-location --no-wrap | grep "^msg" | tail --lines=+3 >$MS_PATH
grep "^msgid" $PO_PATH.ms | sed 's/^msgid //g' >$MSGID_PATH
grep "^msgstr" $PO_PATH.ms | sed 's/^msgstr //g' >$MSGSTR_PATH
echo "%% -*- coding: latin-1 -*-" >$MSGS_PATH
paste $MSGID_PATH $MSGSTR_PATH --delimiter=, | awk '{print "{" $0 "}."}' | sort -g >>$MSGS_PATH
paste $MSGID_PATH $MSGSTR_PATH --delimiter=, | awk '{print "{" $0 "}."}' | sort -g >$MSGS_PATH
rm $MS_PATH
rm $MSGID_PATH
@@ -261,7 +258,7 @@ extract_lang_updateall ()
MISSING=`msgfmt --statistics $PO 2>&1 | awk '{printf "%5s", $4 }'`
echo -n " $MISSING"
LANGUAGE=`grep "X-Language:" $PO | sed 's/\"X-Language: //g' | sed 's/\\\\n\"//g' | awk '{printf "%-12s", $1}'`
LANGUAGE=`grep "Language:" $PO | sed 's/\"X-Language: //g' | sed 's/\\\\n\"//g' | awk '{printf "%-12s", $1}'`
echo -n " $LANGUAGE"
LASTAUTH=`grep "Last-Translator" $PO | sed 's/\"Last-Translator: //g' | sed 's/\\\\n\"//g'`
@@ -291,8 +288,8 @@ translation_instructions ()
echo " $MSGS_PATH"
}
EJA_DIR=`pwd`
RUN_DIR=`pwd`
EJA_DIR=`pwd`/..
RUN_DIR=`pwd`/..
PROJECT=ejabberd
while [ $# -ne 0 ] ; do
+60
View File
@@ -0,0 +1,60 @@
SHELL = /bin/bash
CONTRIBUTED_MODULES = ""
#ifeq ($(shell ls mod_http_bind.tex),mod_http_bind.tex)
# CONTRIBUTED_MODULES += "\\n\\setboolean{modhttpbind}{true}"
#endif
all: release pdf html
release:
@echo "Notes for the releaser:"
@echo "* Do not forget to add a link to the release notes in guide.tex"
@echo "* Do not forget to update the version number in src/ejabberd.app!"
@echo "* Do not forget to update the features in introduction.tex (including \new{} and \improved{} tags)."
@echo "Press any key to continue"
##@read foo
@echo "% ejabberd version (automatically generated)." > version.tex
@echo "\newcommand{\version}{"`sed '/vsn/!d;s/\(.*\)"\(.*\)"\(.*\)/\2/' ../src/ejabberd.app`"}" >> version.tex
@echo -n "% Contributed modules (automatically generated)." > contributed_modules.tex
@echo -e "$(CONTRIBUTED_MODULES)" >> contributed_modules.tex
html: guide.html dev.html features.html
pdf: guide.pdf features.pdf
clean:
rm -f *.aux
rm -f *.haux
rm -f *.htoc
rm -f *.idx
rm -f *.ilg
rm -f *.ind
rm -f *.log
rm -f *.out
rm -f *.pdf
rm -f *.toc
[ ! -f contributed_modules.tex ] || rm contributed_modules.tex
distclean: clean
rm -f *.html
guide.html: guide.tex
hevea -fix -pedantic guide.tex
dev.html: dev.tex
hevea -fix -pedantic dev.tex
features.html: features.tex
hevea -fix -pedantic features.tex
guide.pdf: guide.tex
pdflatex guide.tex
pdflatex guide.tex
pdflatex guide.tex
makeindex guide.idx
pdflatex guide.tex
features.pdf: features.tex
pdflatex features.tex
+412
View File
@@ -0,0 +1,412 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>Ejabberd 3.0.0-prealpha Developers Guide
</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<META name="GENERATOR" content="hevea 1.10">
<STYLE type="text/css">
.li-itemize{margin:1ex 0ex;}
.li-enumerate{margin:1ex 0ex;}
.dd-description{margin:0ex 0ex 1ex 4ex;}
.dt-description{margin:0ex;}
.toc{list-style:none;}
.thefootnotes{text-align:left;margin:0ex;}
.dt-thefootnotes{margin:0em;}
.dd-thefootnotes{margin:0em 0em 0em 2em;}
.footnoterule{margin:1em auto 1em 0px;width:50%;}
.caption{padding-left:2ex; padding-right:2ex; margin-left:auto; margin-right:auto}
.title{margin:2ex auto;text-align:center}
.center{text-align:center;margin-left:auto;margin-right:auto;}
.flushleft{text-align:left;margin-left:0ex;margin-right:auto;}
.flushright{text-align:right;margin-left:auto;margin-right:0ex;}
DIV TABLE{margin-left:inherit;margin-right:inherit;}
PRE{text-align:left;margin-left:0ex;margin-right:auto;}
BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
TD P{margin:0px;}
.boxed{border:1px solid black}
.textboxed{border:1px solid black}
.vbar{border:none;width:2px;background-color:black;}
.hbar{border:none;height:2px;width:100%;background-color:black;}
.hfill{border:none;height:1px;width:200%;background-color:black;}
.vdisplay{border-collapse:separate;border-spacing:2px;width:auto; empty-cells:show; border:2px solid red;}
.vdcell{white-space:nowrap;padding:0px;width:auto; border:2px solid green;}
.display{border-collapse:separate;border-spacing:2px;width:auto; border:none;}
.dcell{white-space:nowrap;padding:0px;width:auto; border:none;}
.dcenter{margin:0ex auto;}
.vdcenter{border:solid #FF8000 2px; margin:0ex auto;}
.minipage{text-align:left; margin-left:0em; margin-right:auto;}
.marginpar{border:solid thin black; width:20%; text-align:left;}
.marginparleft{float:left; margin-left:0ex; margin-right:1ex;}
.marginparright{float:right; margin-left:1ex; margin-right:0ex;}
.theorem{text-align:left;margin:1ex auto 1ex 0ex;}
.part{margin:2ex auto;text-align:center}
</STYLE>
</HEAD>
<BODY >
<!--HEVEA command line is: /usr/bin/hevea -fix -pedantic dev.tex -->
<!--CUT DEF section 1 --><P><A NAME="titlepage"></A>
</P><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Ejabberd 3.0.0-prealpha Developers Guide</H1><H3 CLASS="titlerest">Alexey Shchepin<BR>
<A HREF="mailto:alexey@sevcom.net"><TT>mailto:alexey@sevcom.net</TT></A><BR>
<A HREF="xmpp:aleksey@jabber.ru"><TT>xmpp:aleksey@jabber.ru</TT></A></H3></TD></TR>
</TABLE><DIV CLASS="center">
<IMG SRC="logo.png" ALT="logo.png">
</DIV><BLOCKQUOTE CLASS="quotation"><I>I can thoroughly recommend ejabberd for ease of setup &#X2013;
Kevin Smith, Current maintainer of the Psi project</I></BLOCKQUOTE><!--TOC section Contents-->
<H2 CLASS="section"><!--SEC ANCHOR -->Contents</H2><!--SEC END --><UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc1">1&#XA0;&#XA0;Key Features</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc2">2&#XA0;&#XA0;Additional Features</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc3">3&#XA0;&#XA0;How it Works</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc4">3.1&#XA0;&#XA0;Router</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc5">3.2&#XA0;&#XA0;Local Router</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc6">3.3&#XA0;&#XA0;Session Manager</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc7">3.4&#XA0;&#XA0;S2S Manager</A>
</LI></UL>
</LI><LI CLASS="li-toc"><A HREF="#htoc8">4&#XA0;&#XA0;Authentication</A>
<UL CLASS="toc">
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc9">4.0.1&#XA0;&#XA0;External</A>
</LI></UL>
</UL>
</LI><LI CLASS="li-toc"><A HREF="#htoc10">5&#XA0;&#XA0;XML Representation</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc11">6&#XA0;&#XA0;Module <TT>xml</TT></A>
</LI><LI CLASS="li-toc"><A HREF="#htoc12">7&#XA0;&#XA0;Module <TT>xml_stream</TT></A>
</LI><LI CLASS="li-toc"><A HREF="#htoc13">8&#XA0;&#XA0;Modules</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc14">8.1&#XA0;&#XA0;Module gen_iq_handler</A>
</LI><LI CLASS="li-toc"><A HREF="#htoc15">8.2&#XA0;&#XA0;Services</A>
</LI></UL>
</LI></UL><P>Introduction
<A NAME="intro"></A></P><P><TT>ejabberd</TT> is a free and open source instant messaging server written in <A HREF="http://www.erlang.org/">Erlang/OTP</A>.</P><P><TT>ejabberd</TT> is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.</P><P><TT>ejabberd</TT> is designed to be a rock-solid and feature rich XMPP server.</P><P><TT>ejabberd</TT> is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.</P><!--TOC section Key Features-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc1">1</A>&#XA0;&#XA0;Key Features</H2><!--SEC END --><P>
<A NAME="keyfeatures"></A>
</P><P><TT>ejabberd</TT> is:
</P><UL CLASS="itemize"><LI CLASS="li-itemize">
Cross-platform: <TT>ejabberd</TT> runs under Microsoft Windows and Unix derived systems such as Linux, FreeBSD and NetBSD.</LI><LI CLASS="li-itemize">Distributed: You can run <TT>ejabberd</TT> on a cluster of machines and all of them will serve the same Jabber domain(s). When you need more capacity you can simply add a new cheap node to your cluster. Accordingly, you do not need to buy an expensive high-end machine to support tens of thousands concurrent users.</LI><LI CLASS="li-itemize">Fault-tolerant: You can deploy an <TT>ejabberd</TT> cluster so that all the information required for a properly working service will be replicated permanently on all nodes. This means that if one of the nodes crashes, the others will continue working without disruption. In addition, nodes also can be added or replaced &#X2018;on the fly&#X2019;.</LI><LI CLASS="li-itemize">Administrator Friendly: <TT>ejabberd</TT> is built on top of the Open Source Erlang. As a result you do not need to install an external database, an external web server, amongst others because everything is already included, and ready to run out of the box. Other administrator benefits include:
<UL CLASS="itemize"><LI CLASS="li-itemize">
Comprehensive documentation.
</LI><LI CLASS="li-itemize">Straightforward installers for Linux, Mac OS X, and Windows. </LI><LI CLASS="li-itemize">Web Administration.
</LI><LI CLASS="li-itemize">Shared Roster Groups.
</LI><LI CLASS="li-itemize">Command line administration tool. </LI><LI CLASS="li-itemize">Can integrate with existing authentication mechanisms.
</LI><LI CLASS="li-itemize">Capability to send announce messages.
</LI></UL></LI><LI CLASS="li-itemize">Internationalized: <TT>ejabberd</TT> leads in internationalization. Hence it is very well suited in a globalized world. Related features are:
<UL CLASS="itemize"><LI CLASS="li-itemize">
Translated to 24 languages. </LI><LI CLASS="li-itemize">Support for <A HREF="http://www.ietf.org/rfc/rfc3490.txt">IDNA</A>.
</LI></UL></LI><LI CLASS="li-itemize">Open Standards: <TT>ejabberd</TT> is the first Open Source Jabber server claiming to fully comply to the XMPP standard.
<UL CLASS="itemize"><LI CLASS="li-itemize">
Fully XMPP compliant.
</LI><LI CLASS="li-itemize">XML-based protocol.
</LI><LI CLASS="li-itemize"><A HREF="http://www.ejabberd.im/protocols">Many protocols supported</A>.
</LI></UL></LI></UL><!--TOC section Additional Features-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc2">2</A>&#XA0;&#XA0;Additional Features</H2><!--SEC END --><P>
<A NAME="addfeatures"></A>
</P><P>Moreover, <TT>ejabberd</TT> comes with a wide range of other state-of-the-art features:
</P><UL CLASS="itemize"><LI CLASS="li-itemize">
Modular
<UL CLASS="itemize"><LI CLASS="li-itemize">
Load only the modules you want.
</LI><LI CLASS="li-itemize">Extend <TT>ejabberd</TT> with your own custom modules.
</LI></UL>
</LI><LI CLASS="li-itemize">Security
<UL CLASS="itemize"><LI CLASS="li-itemize">
SASL and STARTTLS for c2s and s2s connections.
</LI><LI CLASS="li-itemize">STARTTLS and Dialback s2s connections.
</LI><LI CLASS="li-itemize">Web Admin accessible via HTTPS secure access.
</LI></UL>
</LI><LI CLASS="li-itemize">Databases
<UL CLASS="itemize"><LI CLASS="li-itemize">
Internal database for fast deployment (Mnesia).
</LI><LI CLASS="li-itemize">Native MySQL support.
</LI><LI CLASS="li-itemize">Native PostgreSQL support.
</LI><LI CLASS="li-itemize">ODBC data storage support.
</LI><LI CLASS="li-itemize">Microsoft SQL Server support. </LI></UL>
</LI><LI CLASS="li-itemize">Authentication
<UL CLASS="itemize"><LI CLASS="li-itemize">
Internal Authentication.
</LI><LI CLASS="li-itemize">PAM, LDAP and ODBC. </LI><LI CLASS="li-itemize">External Authentication script.
</LI></UL>
</LI><LI CLASS="li-itemize">Others
<UL CLASS="itemize"><LI CLASS="li-itemize">
Support for virtual hosting.
</LI><LI CLASS="li-itemize">Compressing XML streams with Stream Compression (<A HREF="http://www.xmpp.org/extensions/xep-0138.html">XEP-0138</A>).
</LI><LI CLASS="li-itemize">Statistics via Statistics Gathering (<A HREF="http://www.xmpp.org/extensions/xep-0039.html">XEP-0039</A>).
</LI><LI CLASS="li-itemize">IPv6 support both for c2s and s2s connections.
</LI><LI CLASS="li-itemize"><A HREF="http://www.xmpp.org/extensions/xep-0045.html">Multi-User Chat</A> module with support for clustering and HTML logging. </LI><LI CLASS="li-itemize">Users Directory based on users vCards.
</LI><LI CLASS="li-itemize"><A HREF="http://www.xmpp.org/extensions/xep-0060.html">Publish-Subscribe</A> component with support for <A HREF="http://www.xmpp.org/extensions/xep-0163.html">Personal Eventing via Pubsub</A>.
</LI><LI CLASS="li-itemize">Support for web clients: <A HREF="http://www.xmpp.org/extensions/xep-0025.html">HTTP Polling</A> and <A HREF="http://www.xmpp.org/extensions/xep-0206.html">HTTP Binding (BOSH)</A> services.
</LI><LI CLASS="li-itemize">Component support: interface with networks such as AIM, ICQ and MSN installing special tranports.
</LI></UL>
</LI></UL><!--TOC section How it Works-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc3">3</A>&#XA0;&#XA0;How it Works</H2><!--SEC END --><P>
<A NAME="howitworks"></A></P><P>A XMPP domain is served by one or more <TT>ejabberd</TT> nodes. These nodes can
be run on different machines that are connected via a network. They all must
have the ability to connect to port 4369 of all another nodes, and must have
the same magic cookie (see Erlang/OTP documentation, in other words the file
<TT>~ejabberd/.erlang.cookie</TT> must be the same on all nodes). This is
needed because all nodes exchange information about connected users, S2S
connections, registered services, etc&#X2026;</P><P>Each <TT>ejabberd</TT> node have following modules:
</P><UL CLASS="itemize"><LI CLASS="li-itemize">
router;
</LI><LI CLASS="li-itemize">local router.
</LI><LI CLASS="li-itemize">session manager;
</LI><LI CLASS="li-itemize">S2S manager;
</LI></UL><!--TOC subsection Router-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc4">3.1</A>&#XA0;&#XA0;Router</H3><!--SEC END --><P>This module is the main router of XMPP packets on each node. It routes
them based on their destinations domains. It has two tables: local and global
routes. First, domain of packet destination searched in local table, and if it
found, then the packet is routed to appropriate process. If no, then it
searches in global table, and is routed to the appropriate <TT>ejabberd</TT> node or
process. If it does not exists in either tables, then it sent to the S2S
manager.</P><!--TOC subsection Local Router-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc5">3.2</A>&#XA0;&#XA0;Local Router</H3><!--SEC END --><P>This module routes packets which have a destination domain equal to this server
name. If destination JID has a non-empty user part, then it routed to the
session manager, else it is processed depending on it&#X2019;s content.</P><!--TOC subsection Session Manager-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc6">3.3</A>&#XA0;&#XA0;Session Manager</H3><!--SEC END --><P>This module routes packets to local users. It searches for what user resource
packet must be sended via presence table. If this resource is connected to
this node, it is routed to C2S process, if it connected via another node, then
the packet is sent to session manager on that node.</P><!--TOC subsection S2S Manager-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc7">3.4</A>&#XA0;&#XA0;S2S Manager</H3><!--SEC END --><P>This module routes packets to other XMPP servers. First, it checks if an
open S2S connection from the domain of the packet source to the domain of
packet destination already exists. If it is open on another node, then it
routes the packet to S2S manager on that node, if it is open on this node, then
it is routed to the process that serves this connection, and if a connection
does not exist, then it is opened and registered.</P><!--TOC section Authentication-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc8">4</A>&#XA0;&#XA0;Authentication</H2><!--SEC END --><!--TOC subsubsection External-->
<H4 CLASS="subsubsection"><!--SEC ANCHOR --><A NAME="htoc9">4.0.1</A>&#XA0;&#XA0;External</H4><!--SEC END --><P>
<A NAME="externalauth"></A>
</P><P>The external authentication script follows
<A HREF="http://www.erlang.org/doc/tutorial/c_portdriver.html">the erlang port driver API</A>.</P><P>That script is supposed to do theses actions, in an infinite loop:
</P><UL CLASS="itemize"><LI CLASS="li-itemize">
read from stdin: AABBBBBBBBB.....
<UL CLASS="itemize"><LI CLASS="li-itemize">
A: 2 bytes of length data (a short in network byte order)
</LI><LI CLASS="li-itemize">B: a string of length found in A that contains operation in plain text
operation are as follows:
<UL CLASS="itemize"><LI CLASS="li-itemize">
auth:User:Server:Password (check if a username/password pair is correct)
</LI><LI CLASS="li-itemize">isuser:User:Server (check if it&#X2019;s a valid user)
</LI><LI CLASS="li-itemize">setpass:User:Server:Password (set user&#X2019;s password)
</LI><LI CLASS="li-itemize">tryregister:User:Server:Password (try to register an account)
</LI><LI CLASS="li-itemize">removeuser:User:Server (remove this account)
</LI><LI CLASS="li-itemize">removeuser3:User:Server:Password (remove this account if the password is correct)
</LI></UL>
</LI></UL>
</LI><LI CLASS="li-itemize">write to stdout: AABB
<UL CLASS="itemize"><LI CLASS="li-itemize">
A: the number 2 (coded as a short, which is bytes length of following result)
</LI><LI CLASS="li-itemize">B: the result code (coded as a short), should be 1 for success/valid, or 0 for failure/invalid
</LI></UL>
</LI></UL><P>Example python script
</P><PRE CLASS="verbatim">#!/usr/bin/python
import sys
from struct import *
def from_ejabberd():
input_length = sys.stdin.read(2)
(size,) = unpack('&gt;h', input_length)
return sys.stdin.read(size).split(':')
def to_ejabberd(bool):
answer = 0
if bool:
answer = 1
token = pack('&gt;hh', 2, answer)
sys.stdout.write(token)
sys.stdout.flush()
def auth(username, server, password):
return True
def isuser(username, server):
return True
def setpass(username, server, password):
return True
while True:
data = from_ejabberd()
success = False
if data[0] == "auth":
success = auth(data[1], data[2], data[3])
elif data[0] == "isuser":
success = isuser(data[1], data[2])
elif data[0] == "setpass":
success = setpass(data[1], data[2], data[3])
to_ejabberd(success)
</PRE><!--TOC section XML Representation-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc10">5</A>&#XA0;&#XA0;XML Representation</H2><!--SEC END --><P>
<A NAME="xmlrepr"></A></P><P>Each XML stanza is represented as the following tuple:
</P><PRE CLASS="verbatim">XMLElement = {xmlelement, Name, Attrs, [ElementOrCDATA]}
Name = string()
Attrs = [Attr]
Attr = {Key, Val}
Key = string()
Val = string()
ElementOrCDATA = XMLElement | CDATA
CDATA = {xmlcdata, string()}
</PRE><P>E.&#XA0;g. this stanza:
</P><PRE CLASS="verbatim">&lt;message to='test@conference.example.org' type='groupchat'&gt;
&lt;body&gt;test&lt;/body&gt;
&lt;/message&gt;
</PRE><P>is represented as the following structure:
</P><PRE CLASS="verbatim">{xmlelement, "message",
[{"to", "test@conference.example.org"},
{"type", "groupchat"}],
[{xmlelement, "body",
[],
[{xmlcdata, "test"}]}]}}
</PRE><!--TOC section Module <TT>xml</TT>-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc11">6</A>&#XA0;&#XA0;Module <TT>xml</TT></H2><!--SEC END --><P>
<A NAME="xmlmod"></A></P><DL CLASS="description"><DT CLASS="dt-description">
</DT><DD CLASS="dd-description"><CODE>element_to_string(El) -&gt; string()</CODE>
<PRE CLASS="verbatim">El = XMLElement
</PRE>Returns string representation of XML stanza <TT>El</TT>.</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>crypt(S) -&gt; string()</CODE>
<PRE CLASS="verbatim">S = string()
</PRE>Returns string which correspond to <TT>S</TT> with encoded XML special
characters.</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>remove_cdata(ECList) -&gt; EList</CODE>
<PRE CLASS="verbatim">ECList = [ElementOrCDATA]
EList = [XMLElement]
</PRE><TT>EList</TT> is a list of all non-CDATA elements of ECList.</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>get_path_s(El, Path) -&gt; Res</CODE>
<PRE CLASS="verbatim">El = XMLElement
Path = [PathItem]
PathItem = PathElem | PathAttr | PathCDATA
PathElem = {elem, Name}
PathAttr = {attr, Name}
PathCDATA = cdata
Name = string()
Res = string() | XMLElement
</PRE>If <TT>Path</TT> is empty, then returns <TT>El</TT>. Else sequentially
consider elements of <TT>Path</TT>. Each element is one of:
<DL CLASS="description"><DT CLASS="dt-description">
</DT><DD CLASS="dd-description"><CODE>{elem, Name}</CODE> <TT>Name</TT> is name of subelement of
<TT>El</TT>, if such element exists, then this element considered in
following steps, else returns empty string.
</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>{attr, Name}</CODE> If <TT>El</TT> have attribute <TT>Name</TT>, then
returns value of this attribute, else returns empty string.
</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>cdata</CODE> Returns CDATA of <TT>El</TT>.
</DD></DL></DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description">TODO:
<PRE CLASS="verbatim"> get_cdata/1, get_tag_cdata/1
get_attr/2, get_attr_s/2
get_tag_attr/2, get_tag_attr_s/2
get_subtag/2
</PRE></DD></DL><!--TOC section Module <TT>xml_stream</TT>-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc12">7</A>&#XA0;&#XA0;Module <TT>xml_stream</TT></H2><!--SEC END --><P>
<A NAME="xmlstreammod"></A></P><DL CLASS="description"><DT CLASS="dt-description">
</DT><DD CLASS="dd-description"><CODE>parse_element(Str) -&gt; XMLElement | {error, Err}</CODE>
<PRE CLASS="verbatim">Str = string()
Err = term()
</PRE>Parses <TT>Str</TT> using XML parser, returns either parsed element or error
tuple.
</DD></DL><!--TOC section Modules-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc13">8</A>&#XA0;&#XA0;Modules</H2><!--SEC END --><P>
<A NAME="emods"></A></P><!--TOC subsection Module gen_iq_handler-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc14">8.1</A>&#XA0;&#XA0;Module gen_iq_handler</H3><!--SEC END --><P>
<A NAME="geniqhandl"></A></P><P>The module <CODE>gen_iq_handler</CODE> allows to easily write handlers for IQ packets
of particular XML namespaces that addressed to server or to users bare JIDs.</P><P>In this module the following functions are defined:
</P><DL CLASS="description"><DT CLASS="dt-description">
</DT><DD CLASS="dd-description"><CODE>add_iq_handler(Component, Host, NS, Module, Function, Type)</CODE>
<PRE CLASS="verbatim">Component = Module = Function = atom()
Host = NS = string()
Type = no_queue | one_queue | parallel
</PRE>Registers function <CODE>Module:Function</CODE> as handler for IQ packets on
virtual host <CODE>Host</CODE> that contain child of namespace <CODE>NS</CODE> in
<CODE>Component</CODE>. Queueing discipline is <CODE>Type</CODE>. There are at least
two components defined:
<DL CLASS="description"><DT CLASS="dt-description">
</DT><DD CLASS="dd-description"><CODE>ejabberd_local</CODE> Handles packets that addressed to server JID;
</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>ejabberd_sm</CODE> Handles packets that addressed to users bare JIDs.
</DD></DL>
</DD><DT CLASS="dt-description"></DT><DD CLASS="dd-description"><CODE>remove_iq_handler(Component, Host, NS)</CODE>
<PRE CLASS="verbatim">Component = atom()
Host = NS = string()
</PRE>Removes IQ handler on virtual host <CODE>Host</CODE> for namespace <CODE>NS</CODE> from
<CODE>Component</CODE>.
</DD></DL><P>Handler function must have the following type:
</P><DL CLASS="description"><DT CLASS="dt-description">
</DT><DD CLASS="dd-description"><CODE>Module:Function(From, To, IQ)</CODE>
<PRE CLASS="verbatim">From = To = jid()
</PRE></DD></DL><PRE CLASS="verbatim">-module(mod_cputime).
-behaviour(gen_mod).
-export([start/2,
stop/1,
process_local_iq/3]).
-include("ejabberd.hrl").
-include("jlib.hrl").
-define(NS_CPUTIME, "ejabberd:cputime").
start(Host, Opts) -&gt;
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_CPUTIME,
?MODULE, process_local_iq, IQDisc).
stop(Host) -&gt;
gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_CPUTIME).
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) -&gt;
case Type of
set -&gt;
{iq, ID, error, XMLNS,
[SubEl, ?ERR_NOT_ALLOWED]};
get -&gt;
CPUTime = element(1, erlang:statistics(runtime))/1000,
SCPUTime = lists:flatten(io_lib:format("~.3f", CPUTime)),
{iq, ID, result, XMLNS,
[{xmlelement, "query",
[{"xmlns", ?NS_CPUTIME}],
[{xmlelement, "cputime", [], [{xmlcdata, SCPUTime}]}]}]}
end.
</PRE><!--TOC subsection Services-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc15">8.2</A>&#XA0;&#XA0;Services</H3><!--SEC END --><P>
<A NAME="services"></A></P><PRE CLASS="verbatim">-module(mod_echo).
-behaviour(gen_mod).
-export([start/2, init/1, stop/1]).
-include("ejabberd.hrl").
-include("jlib.hrl").
start(Host, Opts) -&gt;
MyHost = gen_mod:get_opt(host, Opts, "echo." ++ Host),
register(gen_mod:get_module_proc(Host, ?PROCNAME),
spawn(?MODULE, init, [MyHost])).
init(Host) -&gt;
ejabberd_router:register_local_route(Host),
loop(Host).
loop(Host) -&gt;
receive
{route, From, To, Packet} -&gt;
ejabberd_router:route(To, From, Packet),
loop(Host);
stop -&gt;
ejabberd_router:unregister_route(Host),
ok;
_ -&gt;
loop(Host)
end.
stop(Host) -&gt;
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
Proc ! stop,
{wait, Proc}.
</PRE><!--CUT END -->
<!--HTMLFOOT-->
<!--ENDHTML-->
<!--FOOTER-->
<HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by
</EM><A HREF="http://hevea.inria.fr/index.html"><EM>H</EM><EM><FONT SIZE=2><sup>E</sup></FONT></EM><EM>V</EM><EM><FONT SIZE=2><sup>E</sup></FONT></EM><EM>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY>
</HTML>
+470
View File
@@ -0,0 +1,470 @@
\documentclass[a4paper,10pt]{article}
%% Packages
\usepackage{graphics}
\usepackage{hevea}
\usepackage{makeidx}
\usepackage{verbatim}
%% Index
\makeindex
% Remove the index anchors from the HTML version to save size and bandwith.
\newcommand{\ind}[1]{\begin{latexonly}\index{#1}\end{latexonly}}
%% Images
\newcommand{\logoscale}{0.7}
\newcommand{\imgscale}{0.58}
\newcommand{\insimg}[1]{\insscaleimg{\imgscale}{#1}}
\newcommand{\insscaleimg}[2]{
\imgsrc{#2}{}
\begin{latexonly}
\scalebox{#1}{\includegraphics{#2}}
\end{latexonly}
}
%% Various
\newcommand{\ns}[1]{\texttt{#1}}
\newcommand{\ejabberd}{\texttt{ejabberd}}
\newcommand{\Jabber}{Jabber}
\newcommand{\XMPP}{XMPP}
%% Modules
\newcommand{\module}[1]{\texttt{#1}}
\newcommand{\modadhoc}{\module{mod\_adhoc}}
\newcommand{\modannounce}{\module{mod\_announce}}
\newcommand{\modconfigure}{\module{mod\_configure}}
\newcommand{\moddisco}{\module{mod\_disco}}
\newcommand{\modecho}{\module{mod\_echo}}
\newcommand{\modirc}{\module{mod\_irc}}
\newcommand{\modlast}{\module{mod\_last}}
\newcommand{\modlastodbc}{\module{mod\_last\_odbc}}
\newcommand{\modmuc}{\module{mod\_muc}}
\newcommand{\modmuclog}{\module{mod\_muc\_log}}
\newcommand{\modoffline}{\module{mod\_offline}}
\newcommand{\modofflineodbc}{\module{mod\_offline\_odbc}}
\newcommand{\modprivacy}{\module{mod\_privacy}}
\newcommand{\modprivate}{\module{mod\_private}}
\newcommand{\modpubsub}{\module{mod\_pubsub}}
\newcommand{\modregister}{\module{mod\_register}}
\newcommand{\modroster}{\module{mod\_roster}}
\newcommand{\modrosterodbc}{\module{mod\_roster\_odbc}}
\newcommand{\modservicelog}{\module{mod\_service\_log}}
\newcommand{\modsharedroster}{\module{mod\_shared\_roster}}
\newcommand{\modstats}{\module{mod\_stats}}
\newcommand{\modtime}{\module{mod\_time}}
\newcommand{\modvcard}{\module{mod\_vcard}}
\newcommand{\modvcardldap}{\module{mod\_vcard\_ldap}}
\newcommand{\modvcardodbc}{\module{mod\_vcard\_odbc}}
\newcommand{\modversion}{\module{mod\_version}}
%% Title page
\include{version}
\title{Ejabberd \version\ Developers Guide}
\author{Alexey Shchepin \\
\ahrefurl{mailto:alexey@sevcom.net} \\
\ahrefurl{xmpp:aleksey@jabber.ru}}
%% Options
\newcommand{\marking}[1]{#1} % Marking disabled
\newcommand{\quoting}[2][yozhik]{} % Quotes disabled
\newcommand{\new}{\begin{latexonly}\marginpar{\textsc{new}}\end{latexonly}} % Highlight new features
\newcommand{\improved}{\begin{latexonly}\marginpar{\textsc{improved}}\end{latexonly}} % Highlight improved features
\newcommand{\moreinfo}[1]{} % Hide details
%% Footnotes
\newcommand{\txepref}[2]{\footahref{http://www.xmpp.org/extensions/xep-#1.html}{#2}}
\newcommand{\xepref}[1]{\txepref{#1}{XEP-#1}}
\begin{document}
\label{titlepage}
\begin{titlepage}
\maketitle{}
\begin{center}
{\insscaleimg{\logoscale}{logo.png}
\par
}
\end{center}
\begin{quotation}\textit{I can thoroughly recommend ejabberd for ease of setup --
Kevin Smith, Current maintainer of the Psi project}\end{quotation}
\end{titlepage}
\tableofcontents{}
% Input introduction.tex
\input{introduction}
\section{How it Works}
\label{howitworks}
A \XMPP{} domain is served by one or more \ejabberd{} nodes. These nodes can
be run on different machines that are connected via a network. They all must
have the ability to connect to port 4369 of all another nodes, and must have
the same magic cookie (see Erlang/OTP documentation, in other words the file
\texttt{\~{}ejabberd/.erlang.cookie} must be the same on all nodes). This is
needed because all nodes exchange information about connected users, S2S
connections, registered services, etc\ldots
Each \ejabberd{} node have following modules:
\begin{itemize}
\item router;
\item local router.
\item session manager;
\item S2S manager;
\end{itemize}
\subsection{Router}
This module is the main router of \XMPP{} packets on each node. It routes
them based on their destinations domains. It has two tables: local and global
routes. First, domain of packet destination searched in local table, and if it
found, then the packet is routed to appropriate process. If no, then it
searches in global table, and is routed to the appropriate \ejabberd{} node or
process. If it does not exists in either tables, then it sent to the S2S
manager.
\subsection{Local Router}
This module routes packets which have a destination domain equal to this server
name. If destination JID has a non-empty user part, then it routed to the
session manager, else it is processed depending on it's content.
\subsection{Session Manager}
This module routes packets to local users. It searches for what user resource
packet must be sended via presence table. If this resource is connected to
this node, it is routed to C2S process, if it connected via another node, then
the packet is sent to session manager on that node.
\subsection{S2S Manager}
This module routes packets to other \XMPP{} servers. First, it checks if an
open S2S connection from the domain of the packet source to the domain of
packet destination already exists. If it is open on another node, then it
routes the packet to S2S manager on that node, if it is open on this node, then
it is routed to the process that serves this connection, and if a connection
does not exist, then it is opened and registered.
\section{Authentication}
\subsubsection{External}
\label{externalauth}
\ind{external authentication}
The external authentication script follows
\footahref{http://www.erlang.org/doc/tutorial/c_portdriver.html}{the erlang port driver API}.
That script is supposed to do theses actions, in an infinite loop:
\begin{itemize}
\item read from stdin: AABBBBBBBBB.....
\begin{itemize}
\item A: 2 bytes of length data (a short in network byte order)
\item B: a string of length found in A that contains operation in plain text
operation are as follows:
\begin{itemize}
\item auth:User:Server:Password (check if a username/password pair is correct)
\item isuser:User:Server (check if it's a valid user)
\item setpass:User:Server:Password (set user's password)
\item tryregister:User:Server:Password (try to register an account)
\item removeuser:User:Server (remove this account)
\item removeuser3:User:Server:Password (remove this account if the password is correct)
\end{itemize}
\end{itemize}
\item write to stdout: AABB
\begin{itemize}
\item A: the number 2 (coded as a short, which is bytes length of following result)
\item B: the result code (coded as a short), should be 1 for success/valid, or 0 for failure/invalid
\end{itemize}
\end{itemize}
Example python script
\begin{verbatim}
#!/usr/bin/python
import sys
from struct import *
def from_ejabberd():
input_length = sys.stdin.read(2)
(size,) = unpack('>h', input_length)
return sys.stdin.read(size).split(':')
def to_ejabberd(bool):
answer = 0
if bool:
answer = 1
token = pack('>hh', 2, answer)
sys.stdout.write(token)
sys.stdout.flush()
def auth(username, server, password):
return True
def isuser(username, server):
return True
def setpass(username, server, password):
return True
while True:
data = from_ejabberd()
success = False
if data[0] == "auth":
success = auth(data[1], data[2], data[3])
elif data[0] == "isuser":
success = isuser(data[1], data[2])
elif data[0] == "setpass":
success = setpass(data[1], data[2], data[3])
to_ejabberd(success)
\end{verbatim}
\section{XML Representation}
\label{xmlrepr}
Each XML stanza is represented as the following tuple:
\begin{verbatim}
XMLElement = {xmlelement, Name, Attrs, [ElementOrCDATA]}
Name = string()
Attrs = [Attr]
Attr = {Key, Val}
Key = string()
Val = string()
ElementOrCDATA = XMLElement | CDATA
CDATA = {xmlcdata, string()}
\end{verbatim}
E.\,g. this stanza:
\begin{verbatim}
<message to='test@conference.example.org' type='groupchat'>
<body>test</body>
</message>
\end{verbatim}
is represented as the following structure:
\begin{verbatim}
{xmlelement, "message",
[{"to", "test@conference.example.org"},
{"type", "groupchat"}],
[{xmlelement, "body",
[],
[{xmlcdata, "test"}]}]}}
\end{verbatim}
\section{Module \texttt{xml}}
\label{xmlmod}
\begin{description}
\item{\verb|element_to_string(El) -> string()|}
\begin{verbatim}
El = XMLElement
\end{verbatim}
Returns string representation of XML stanza \texttt{El}.
\item{\verb|crypt(S) -> string()|}
\begin{verbatim}
S = string()
\end{verbatim}
Returns string which correspond to \texttt{S} with encoded XML special
characters.
\item{\verb|remove_cdata(ECList) -> EList|}
\begin{verbatim}
ECList = [ElementOrCDATA]
EList = [XMLElement]
\end{verbatim}
\texttt{EList} is a list of all non-CDATA elements of ECList.
\item{\verb|get_path_s(El, Path) -> Res|}
\begin{verbatim}
El = XMLElement
Path = [PathItem]
PathItem = PathElem | PathAttr | PathCDATA
PathElem = {elem, Name}
PathAttr = {attr, Name}
PathCDATA = cdata
Name = string()
Res = string() | XMLElement
\end{verbatim}
If \texttt{Path} is empty, then returns \texttt{El}. Else sequentially
consider elements of \texttt{Path}. Each element is one of:
\begin{description}
\item{\verb|{elem, Name}|} \texttt{Name} is name of subelement of
\texttt{El}, if such element exists, then this element considered in
following steps, else returns empty string.
\item{\verb|{attr, Name}|} If \texttt{El} have attribute \texttt{Name}, then
returns value of this attribute, else returns empty string.
\item{\verb|cdata|} Returns CDATA of \texttt{El}.
\end{description}
\item{TODO:}
\begin{verbatim}
get_cdata/1, get_tag_cdata/1
get_attr/2, get_attr_s/2
get_tag_attr/2, get_tag_attr_s/2
get_subtag/2
\end{verbatim}
\end{description}
\section{Module \texttt{xml\_stream}}
\label{xmlstreammod}
\begin{description}
\item{\verb!parse_element(Str) -> XMLElement | {error, Err}!}
\begin{verbatim}
Str = string()
Err = term()
\end{verbatim}
Parses \texttt{Str} using XML parser, returns either parsed element or error
tuple.
\end{description}
\section{Modules}
\label{emods}
%\subsection{gen\_mod behaviour}
%\label{genmod}
%TBD
\subsection{Module gen\_iq\_handler}
\label{geniqhandl}
The module \verb|gen_iq_handler| allows to easily write handlers for IQ packets
of particular XML namespaces that addressed to server or to users bare JIDs.
In this module the following functions are defined:
\begin{description}
\item{\verb|add_iq_handler(Component, Host, NS, Module, Function, Type)|}
\begin{verbatim}
Component = Module = Function = atom()
Host = NS = string()
Type = no_queue | one_queue | parallel
\end{verbatim}
Registers function \verb|Module:Function| as handler for IQ packets on
virtual host \verb|Host| that contain child of namespace \verb|NS| in
\verb|Component|. Queueing discipline is \verb|Type|. There are at least
two components defined:
\begin{description}
\item{\verb|ejabberd_local|} Handles packets that addressed to server JID;
\item{\verb|ejabberd_sm|} Handles packets that addressed to users bare JIDs.
\end{description}
\item{\verb|remove_iq_handler(Component, Host, NS)|}
\begin{verbatim}
Component = atom()
Host = NS = string()
\end{verbatim}
Removes IQ handler on virtual host \verb|Host| for namespace \verb|NS| from
\verb|Component|.
\end{description}
Handler function must have the following type:
\begin{description}
\item{\verb|Module:Function(From, To, IQ)|}
\begin{verbatim}
From = To = jid()
\end{verbatim}
\end{description}
\begin{verbatim}
-module(mod_cputime).
-behaviour(gen_mod).
-export([start/2,
stop/1,
process_local_iq/3]).
-include("ejabberd.hrl").
-include("jlib.hrl").
-define(NS_CPUTIME, "ejabberd:cputime").
start(Host, Opts) ->
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_CPUTIME,
?MODULE, process_local_iq, IQDisc).
stop(Host) ->
gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_CPUTIME).
process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
case Type of
set ->
{iq, ID, error, XMLNS,
[SubEl, ?ERR_NOT_ALLOWED]};
get ->
CPUTime = element(1, erlang:statistics(runtime))/1000,
SCPUTime = lists:flatten(io_lib:format("~.3f", CPUTime)),
{iq, ID, result, XMLNS,
[{xmlelement, "query",
[{"xmlns", ?NS_CPUTIME}],
[{xmlelement, "cputime", [], [{xmlcdata, SCPUTime}]}]}]}
end.
\end{verbatim}
\subsection{Services}
\label{services}
%TBD
%TODO: use \verb|proc_lib|
\begin{verbatim}
-module(mod_echo).
-behaviour(gen_mod).
-export([start/2, init/1, stop/1]).
-include("ejabberd.hrl").
-include("jlib.hrl").
start(Host, Opts) ->
MyHost = gen_mod:get_opt(host, Opts, "echo." ++ Host),
register(gen_mod:get_module_proc(Host, ?PROCNAME),
spawn(?MODULE, init, [MyHost])).
init(Host) ->
ejabberd_router:register_local_route(Host),
loop(Host).
loop(Host) ->
receive
{route, From, To, Packet} ->
ejabberd_router:route(To, From, Packet),
loop(Host);
stop ->
ejabberd_router:unregister_route(Host),
ok;
_ ->
loop(Host)
end.
stop(Host) ->
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
Proc ! stop,
{wait, Proc}.
\end{verbatim}
\end{document}
+18
View File
@@ -0,0 +1,18 @@
APPNAME = ejabberd
VSN = $(shell sed '/vsn/!d;s/\(.*\)"\(.*\)"\(.*\)/\2/' ../../src/ejabberd.app)
DOCDIR=.
SRCDIR=../../src
.PHONY = all
all: docs
clean:
rm -f *.html
rm edoc-info
rm erlang.png
docs:
erl -noshell -run edoc_run application \
"'$(APPNAME)'" '"$(SRCDIR)"' '[{dir,"$(DOCDIR)"},{packages, false},{todo,false},{private,true},{def,{vsn,"$(VSN)"}},{stylesheet,"process-one.css"},{overview,"$(DOCDIR)/overview.edoc"}]' -s init stop
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

+19
View File
@@ -0,0 +1,19 @@
.comment {color: brown}
.export {color: darkorchid}
.import {color: darkorchid}
.string {color: maroon}
.builtin {color: dodgerblue}
.guard {color: mediumturquoise}
.function {color: blue}
.variable {color: green}
.macro {color: mediumpurple}
.record {color: orangered}
.call {color: purple}
.attribute {color: firebrick}
.error{color: red}
.l {
font-style: normal;
font-weight: normal;
text-decoration: none;
color: gray;
}
+356
View File
@@ -0,0 +1,356 @@
%%%-------------------------------------------------------------------
%%% File : escobar_hiliter.erl
%%% Author : Mats Cronqvist <mats.cronqvist@gmail.com>
%%% Description :
%%%
%%% Created : 6 Jun 2005 by Mats Cronqvist <mats.cronqvist@gmail.com>
%%%
%%%
%%% Escobar, Copyright (c) 2005-2009 Mats Cronqvist
%%%
%%% MIT License:
%%%
%%% Permission is hereby granted, free of charge, to any person obtaining a copy
%%% of this software and associated documentation files (the "Software"), to deal
%%% in the Software without restriction, including without limitation the rights
%%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
%%% copies of the Software, and to permit persons to whom the Software is
%%% furnished to do so, subject to the following conditions:
%%%
%%% The above copyright notice and this permission notice shall be included in
%%% all copies or substantial portions of the Software.
%%%
%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
%%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
%%% THE SOFTWARE.
%%%
%%%-------------------------------------------------------------------
-module(escobar_hilite).
-export([file/1,tree/1,string/1,out/2]).
-define(LOG(T),escobar:log(process_info(self()),T)).
-import(erl_syntax,
[get_ann/1,add_ann/2,subtrees/1,update_tree/2,type/1,get_pos/1,
application/2,application_arguments/1,application_operator/1,
arity_qualifier_argument/1,arity_qualifier_body/1,
atom_name/1,atom_value/1,
attribute/2,attribute_name/1,attribute_arguments/1,
clause/3,clause_patterns/1,clause_guard/1,clause_body/1,
comment/2,comment_text/1,comment_padding/1,
function/2,function_name/1,function_clauses/1,function_arity/1,
integer_literal/1,
list/1,list_elements/1,
macro/2,macro_name/1,macro_arguments/1,
module_qualifier_body/1, module_qualifier_argument/1,
string_value/1,string_literal/1,
variable_literal/1,variable_name/1,
record_access/3, record_access_argument/1,
record_access_field/1,record_access_type/1,
record_expr/3, record_expr_argument/1,
record_expr_fields/1, record_expr_type/1,
record_index_expr/2, record_index_expr_field/1,
record_index_expr_type/1,
form_list/1,
get_precomments/1,get_postcomments/1,has_comments/1,
copy_comments/2,remove_comments/1]).
-import(prettypr,
[above/2,follow/2,beside/2,empty/0,
null_text/1,break/1,floating/3,text/1,floating/1]).
-import(lists,[flatten/1,duplicate/2,keysearch/3,member/2,usort/1,reverse/1]).
-import(filename,[join/1,basename/1]).
out(File,HtmlString) ->
{ok,FD}=file:open(File,[write]),
try
io:fwrite(FD,"<html>",[]),
io:fwrite(FD,"<link rel=\"stylesheet\" type=\"text/css\"",[]),
io:fwrite(FD,"href=\"escobar.css\"></link><body><pre>",[]),
io:fwrite(FD,"~s",[HtmlString]),
io:fwrite(FD,"</pre></body></html>",[])
after
file:close(FD)
end.
string(Str) ->
tree(form_list(scan_and_parse(Str,1,[]))).
scan_and_parse([],_Line,Forms) -> reverse(Forms);
scan_and_parse(Text,Line,Forms) ->
{done,{ok,Toks,NLine},Cont} = erl_scan:tokens([],Text,Line),
{ok,Form} = erl_parse:parse_form(Toks),
scan_and_parse(Cont,NLine,[Form|Forms]).
file(FileName) ->
case filelib:is_regular(FileName) of
true ->
case filename:extension(FileName) of
".beam"-> tree(get_tree_beam(FileName));
".erl" -> tree(get_comm_tree_erl(FileName));
".hrl" -> tree(get_comm_tree_erl(FileName));
X -> erlang:error({unknown_extension,X})
end;
false->
erlang:error({no_file,FileName})
end.
get_comm_tree_erl(Filename) ->
Comms = erl_comment_scan:file(Filename),
Forms = get_forms_erl(Filename),
erl_recomment:recomment_forms(Forms,Comms).
get_tree_beam(Filename) ->
case beam_lib:chunks(Filename,["Abst"]) of
{ok,{_,[{"Abst",AChunk}]}} ->
{_,Forms} = binary_to_term(AChunk),
form_list(Forms);
_ ->
erlang:error({no_debuginfo,Filename})
end.
get_forms_erl(Filename) ->
{ok,Fs} = epp_dodger:parse_file(Filename,[{no_fail, true}]),
Fs.
%%% # tree
%%% turn a syntax tree into html by annotating and pretty-printing
%%% with a hook function
tree(Tree) ->
pout(ann(type(Tree),Tree)).
%%lists:foldl(fun(Form,Acc) -> [pout(ann(Form))|Acc] end, [], Tree).
pout(Form) ->
erl_prettypr:format(Form,[{hook,fun tag/3},{paper,90},{ribbon,650}]).
%%% ## formatting
%%% ### 'tag' - the format hook function
tag(Node,Ctxt,Cont) ->
Tags = get_ann(Node),
case member(has_comment,Tags) of
true ->
PreC = get_precomments(Node),
PostC = get_postcomments(Node),
Nod = remove_comments(Node),
Doc0 = tagit(Tags--[has_comment],Cont(Nod,Ctxt)),
postcomment(precomment(Doc0,PreC),PostC);
false ->
Doc0 = Cont(Node,Ctxt),
tagit(Tags,Doc0)
end.
tagit([],Doc0) ->
Doc0;
tagit(["binary"],{beside,_,{beside,Doc,_}}) ->
beside(floating(text("&lt;&lt;")),beside(Doc,floating(text("&gt;&gt;"))));
tagit([Tag],Doc0) ->
beside(null_text(Tag),beside(Doc0,null_text(etag(Tag)))).
etag("<"++Tag) -> "</"++hd(string:tokens(Tag," "))++">".
%%%### comment stuff
precomment(Doc,PreC) ->
above(floating(break(stack(PreC)), -1, -1), Doc).
postcomment(Doc,PostC) ->
beside(Doc, floating(break(stack(PostC)), 1, 0)).
stack([]) -> empty();
stack([Comm|Comms]) ->
Doc = maybe_pad(stack_comment_lines(comment_text(Comm)),Comm),
case Comms of
[] -> Doc;
_ -> above(Doc, stack(Comms))
end.
maybe_pad(Doc,Comm) ->
case comment_padding(Comm) of
I when is_integer(I), 0 < I -> beside(text(duplicate(I,$ )), Doc);
_ -> Doc
end.
%%% stolen with pride from erl_prettypr
%%% Stack lines of text above each other and prefix each string in
%%% the list with a single `%' character.
stack_comment_lines([S | Ss]) ->
D = tagit([dehtml('span', [{class,comment}])],text("%"++debracket(S))),
case Ss of
[] -> D;
_ -> above(D, stack_comment_lines(Ss))
end;
stack_comment_lines([]) ->
empty().
%%% annotate nodes that should be hilited
%%% the annotation is put on the subtree that should be marked up
%%% the annotation is;
%%% has_comments|Markup
%%% if a node already has an annotation the new one is dropped, except
%%% if either the new or the old one is has_comments
ann(binary,Tree) ->
new_tree(Tree,add_anno("binary",Tree));
ann(application,Tree) ->
Op = application_operator(Tree),
Args = application_arguments(Tree),
new_tree(Tree,application(add_anno(mu(application,Tree),Op),Args));
ann(attribute,Tree) ->
Name = attribute_name(Tree),
case atom_value(Name) of
export ->
AQs = list_elements(hd(attribute_arguments(Tree))),
Args = [list([add_anno(mu(export,Tree),AQ) || AQ <- AQs])];
import ->
[ImportMod,ImportFAs] = attribute_arguments(Tree),
AQs = list_elements(ImportFAs),
Args = [ImportMod,list([add_anno(mu(import,Tree),AQ) || AQ <- AQs])];
define ->
[Macro|Rest] = attribute_arguments(Tree),
case type(Macro) of
application ->
Op = application_operator(Macro),
As = application_arguments(Macro),
Args = [application(add_anno(mu(macro,Tree),Op),As)|Rest];
_ ->
Args = [add_anno(mu(macro,Tree),Macro)|Rest]
end;
record ->
[Rec|Rest] = attribute_arguments(Tree),
Args = [add_anno(mu(record,Tree),Rec)|Rest];
_ ->
Args = attribute_arguments(Tree)
end,
new_tree(Tree,attribute(add_anno(mu(attribute,Tree),Name),Args));
ann(record_access,Tree) ->
Arg = record_access_argument(Tree),
Type = record_access_type(Tree),
Field = record_access_field(Tree),
new_tree(Tree,record_access(Arg,add_anno(mu(record,Tree),Type),Field));
ann(record_expr,Tree) ->
Arg = record_expr_argument(Tree),
Type = record_expr_type(Tree),
Fields = record_expr_fields(Tree),
new_tree(Tree,record_expr(Arg,add_anno(mu(record,Tree),Type),Fields));
ann(record_index_expr,Tree) ->
Type = record_index_expr_type(Tree),
Field = record_index_expr_field(Tree),
new_tree(Tree,record_index_expr(add_anno(mu(record,Tree),Type),Field));
ann(function,Tree) ->
Name = function_name(Tree),
Clauses = function_clauses(Tree),
new_tree(Tree,function(add_anno(mu(function,Tree),Name),Clauses));
ann(macro,Tree) ->
Name = macro_name(Tree),
Args = macro_arguments(Tree),
new_tree(Tree,macro(add_anno(mu(macro,Tree),Name), Args));
ann(string,OTree) ->
Tree = erl_syntax:string(debracket(string_value(OTree))),
new_tree(OTree,add_anno(mu(string,OTree),Tree));
ann(variable,Tree) ->
new_tree(Tree,add_anno(mu(variable,Tree),Tree));
ann(text,Tree) ->
new_tree(Tree,add_anno(mu(error,Tree),Tree));
ann(comment,OTree) ->
Pad = comment_padding(OTree),
Text = [debracket(S) || S <- comment_text(OTree)],
Tree = comment(Pad,Text),
new_tree(OTree,add_anno(mu(comment,OTree),Tree));
ann(_Typ,Tree) ->
new_tree(Tree,Tree).
new_tree(OTree,NTree) ->
Tree =
case has_comments(OTree) of
true -> add_ann(has_comment,copy_comments(OTree,NTree));
false -> NTree
end,
SubTrees = subtrees(Tree),
case [[ann(type(SubT),SubT) || SubT<-Group] || Group<-SubTrees] of
[] -> Tree;
NSubtrees -> update_tree(Tree,NSubtrees)
end.
debracket([]) -> [];
debracket([$>|Str]) -> "&gt;"++debracket(Str);
debracket([$<|Str]) -> "&lt;"++debracket(Str);
debracket([C|Str]) -> [C|debracket(Str)].
add_anno(nil,Tree) -> Tree;
add_anno(Ann,Tree) ->
case get_ann(Tree) of
[] -> add_ann(Ann,Tree);
[has_comment] -> add_ann(Ann,Tree);
_OAnn -> Tree
end.
%%%### the markups
mu(application,Node) ->
Op = application_operator(Node),
Ar = length(application_arguments(Node)),
case type(Op) of
%% variable ->
%% dehtml('span', [{class,variable}]);
atom ->
case is_guard_or_builtin(atom_value(Op),Ar) of
guard -> dehtml('span', [{class,guard}]);
builtin->dehtml('span', [{class,builtin}]);
neither->dehtml('span', [{class,call}])
end;
module_qualifier ->
Mod = module_qualifier_argument(Op),
Fun = module_qualifier_body(Op),
case {type(Mod),type(Fun)} of
{atom,atom} ->
case atom_value(Mod) of
erlang -> dehtml('span', [{class,builtin}]);
_ -> dehtml('span', [{class,call}])
end;
_ ->
nil
end;
_ ->
nil
end;
mu(function = Class, {tree, function, _, {function, _, [{tree, clause, _, {clause, Vars, _, _}} | _]}}) ->
dehtml('span', [{class,Class}, {arity,length(Vars)}]);
mu(Class,_Node) ->
dehtml('span', [{class,Class}]).
dehtml(Tag,Atts) ->
flatten([$<,str(Tag),$ ,[[str(A),"=\"",str(V),"\" "]||{A,V}<-Atts],$>]).
str(I) when is_integer(I) -> integer_to_list(I);
str(A) when is_atom(A) -> atom_to_list(A);
str(L) when is_list(L) -> L.
is_guard_or_builtin(atom,1) ->guard;
is_guard_or_builtin(binary,1) ->guard;
is_guard_or_builtin(constant,1) ->guard;
is_guard_or_builtin(float,1) ->guard;
is_guard_or_builtin(function,1) ->guard;
is_guard_or_builtin(function,2) ->guard;
is_guard_or_builtin(integer,1) ->guard;
is_guard_or_builtin(list,1) ->guard;
is_guard_or_builtin(number,1) ->guard;
is_guard_or_builtin(pid,1) ->guard;
is_guard_or_builtin(port,1) ->guard;
is_guard_or_builtin(reference,1) ->guard;
is_guard_or_builtin(tuple,1) ->guard;
is_guard_or_builtin(record,2) ->guard;
is_guard_or_builtin(record,3) ->guard;
is_guard_or_builtin(F,A) ->
case erlang:function_exported(erlang,F,A) orelse
erlang:is_builtin(erlang,F,A) of
true -> builtin;
false-> neither
end.
+54
View File
@@ -0,0 +1,54 @@
%%%-------------------------------------------------------------------
%%% File : escobar_run.erl
%%% Author : Badlop <badlop@process-one.net>
%%% Purpose : Frontend to run Escobar
%%% Created : 16 Apr 2008 by Badlop <badlop@process-one.net>
%%%-------------------------------------------------------------------
-module(escobar_run).
%%% Download ejabberd_hilite.erl from http://code.google.com/p/erl-escobar/
%%% Example calls:
%%% escobar_run:file("escobar_run.erl", "../ejascobar/").
%%% escobar_run:dir(".", "../ejascobar/").
%%% escobar_run:dir(".", "../doc/api/").
%%% find ./ -type f -name '*.html' -exec sed -i 's/class="function" >\([a-z0-9]*\)</class="function" id="\1">\1</;' {} \;
-export([file/2, file/1, dir/1]).
file([F, OutDir]) ->
file(F, OutDir).
file(F, OutDir) ->
String = escobar_hilite:file(F),
FB = filename:basename(F),
FilenameHTML = filename:join(OutDir, FB ++ ".html"),
escobar_hilite:out(FilenameHTML, String).
dir([SrcDir, OutDir]) ->
SrcDirAbs = filename:absname(SrcDir),
OutDirAbs = filename:absname(OutDir),
Files = get_files([SrcDirAbs]),
lists:foreach(
fun(F) ->
case filename:extension(F) of
".erl" ->
file(F, OutDirAbs);
".hrl" ->
file(F, OutDirAbs);
_ ->
ok
end
end,
Files).
get_files([]) ->
[];
get_files([FHead | FTail]) ->
case catch file:list_dir(FHead) of
{ok, Files} ->
FilesHead = [filename:join(FHead, FilesN) || FilesN <- Files],
get_files(FilesHead ++ FTail);
{error, enotdir} ->
[FHead] ++ get_files(FTail)
end.
Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

+522
View File
@@ -0,0 +1,522 @@
%%%----------------------------------------------------------------------
%%% File : funrelg.erl
%%% Author : Badlop <badlop@process-one.net>
%%% Purpose : Function Relation Graph
%%% Created : 3 Apr 2007 by Badlop <badlop@process-one.net>
%%%
%%%
%%% ejabberd, Copyright (C) 2002-2009 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
%%% 02111-1307 USA
%%%
%%%----------------------------------------------------------------------
-module(funrelg).
-author('badlop@process-one.net').
-export([dir/1, file/1, g/0, g/1, gc/0, gc/1, d/0]).
-record(mfa, {mod, func, arity}).
-record(arcs, {id, from, to, occ}).
%% The functions that are not in export and don't call anybody are not drawn
%% The calls to this module that use Mod:Func are drawn as external calls
%%-----------------------------
%% Module handlers
%%-----------------------------
dir([SrcDir, OutDir]) ->
SrcDirAbs = filename:absname(SrcDir),
OutDirAbs = filename:absname(OutDir),
Files = get_files([SrcDirAbs]),
lists:foreach(
fun(F) ->
file(F, OutDirAbs)
end,
Files).
file([SrcDir, OutDir]) ->
SrcFilAbs = filename:absname(SrcDir),
OutDirAbs = filename:absname(OutDir),
file(SrcFilAbs, OutDirAbs).
file(SrcFile, OutDir) ->
case {filename:extension(SrcFile), filename:basename(SrcFile)} of
%% The file must by *.erl, and the first character must be a-z
{".erl", [FirstChar | _]} when (FirstChar >= 97) and (FirstChar =< 122) ->
make_file(SrcFile, OutDir),
d();
_ ->
ok
end.
get_files([]) ->
[];
get_files([FHead | FTail]) ->
case catch file:list_dir(FHead) of
{ok, Files} ->
FilesHead = [filename:join(FHead, FilesN) || FilesN <- Files],
get_files(FilesHead ++ FTail);
{error, enotdir} ->
[FHead] ++ get_files(FTail)
end.
make_file(File, OutDir) ->
FB = filename:basename(File),
FileDot = filename:join(OutDir, FB ++ ".dot"),
Text = gc(File),
{ok,FO}=file:open(FileDot,[write]),
try
io:fwrite(FO,"~s",[Text])
after
file:close(FO)
end,
FileSvg = filename:join(OutDir, filename:basename(File, ".erl") ++ ".svg"),
case os:cmd("dot -Tsvg " ++ FileDot ++ " -o " ++ FileSvg) of
"" -> ok;
ShellResult ->
io:format("Trying to run 'dot', we got this result:~n ~s~n"
"Remember that you need to have Graphviz 'dot' installed.~n", [ShellResult])
end,
ok.
%%====================================================================
%% Internal functions
%%====================================================================
g() ->
g("a.erl").
g(Filename) ->
gc(Filename),
halt().
gc() ->
gc("a.erl").
gc(Filename) ->
{ok, File} = epp_dodger:parse_file(Filename),
ets:new(arcs, [set, public, named_table, {keypos, 2}]),
ets:new(mfa_conversion, [set, public, named_table, {keypos, 1}]),
ets:new(counters, [set, public, named_table]),
ets:insert(counters, {arcs_id, 0}),
ModuleName = get_module_name(File),
Exports = lists:usort(get_exports(File)),
Functions = get_functions(File),
FunctionsParsed = lists:usort(parse_functions(Functions)), % side effects: stores on ets
Privates = FunctionsParsed -- Exports,
%%Externals = get_externals(),
MFAs = get_func_calls(),
AppModules1 = os:cmd("ls -1 ../doc/devdoc/*.html | tr \".\" \" \" | tr \"/\" \" \" | awk '{print $3}'"),
AppModules = [list_to_atom(Str) || Str <- string:tokens(AppModules1, [10])],
ExternalTypes1 = [mfa_to_externaltype(MFA, ModuleName, AppModules, FunctionsParsed) || MFA <- MFAs],
ExternalTypes = lists:usort(ExternalTypes1),
AppExternals = [Function || {Type, Function} <- ExternalTypes, Type == app],
ExmppExternals = [Function || {Type, Function} <- ExternalTypes, Type == exmpp],
OTPExternals = [Function || {Type, Function} <- ExternalTypes, Type == other],
textize(ModuleName, Exports, Privates, AppExternals, ExmppExternals, OTPExternals).
get_arcs_id() ->
ets:update_counter(counters, arcs_id, 1).
insert_arc_normal(FromFunc, FromArity, ToFunc, ToArity) ->
From = #mfa{mod = -1, func = FromFunc, arity = FromArity},
To = #mfa{mod = -1, func = ToFunc, arity = ToArity},
insert_arc(From, To).
insert_arc_external(FromFunc, FromArity, ToMod, ToFunc, ToArity) ->
From = #mfa{mod = -1, func = FromFunc, arity = FromArity},
To = #mfa{mod = ToMod, func = ToFunc, arity = ToArity},
insert_arc(From, To).
insert_arc(From, To) ->
Match = #arcs{
from = From,
to = To,
id='$1',
_='_'},
Select = [{Match, [], ['$1']}],
Ids = ets:select(arcs, Select),
case Ids of
[] ->
ets:insert(arcs,
#arcs{
id = get_arcs_id(),
from = From,
to = To,
occ = 1
}
);
[Id] ->
[Arc] = ets:lookup(arcs, Id),
Arc2 = Arc#arcs{occ = Arc#arcs.occ+1},
ets:insert(arcs, Arc2)
end.
read_arc(Id) ->
ets:lookup(arcs, Id).
d() ->
ets:delete(arcs),
ets:delete(mfa_conversion),
ets:delete(counters).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Get
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_module_name(File) ->
Attributes = get_elements(attribute, File),
get_attribute(module, Attributes).
get_exports(File) ->
Attributes = get_elements(attribute, File),
Exports = get_attribute(export, Attributes),
parse_export(Exports).
get_functions(File) ->
get_elements(function, File).
get_elements(Type, L) -> get_elements(Type, L, []).
get_elements(_, [], Res) -> Res;
get_elements(Type, [{tree, Type, _, A} | L], Res) ->
get_elements(Type, L, Res++[A]);
get_elements(Type, [_ | L], Res) ->
get_elements(Type, L, Res).
get_attribute(_, []) -> [];
get_attribute(Name, [{attribute, {tree, atom, _, Name}, [Al]} | As]) ->
case Name of
module ->
{tree, atom, _, Mn} = Al,
Mn;
export ->
{tree, list, _, {list, Exports, _}} = Al,
Exports++get_attribute(Name, As);
_ -> ok
end;
get_attribute(Name, [_ | As]) ->
get_attribute(Name, As).
parse_export(Ex) ->
lists:foldl(
fun(Aq, Res) ->
{tree, arity_qualifier, _, {arity_qualifier, Atom, Inte}} = Aq,
{tree, atom, _, An} = Atom,
{tree, integer, _, In} = Inte,
Res++[{An, In}]
end,
[],
Ex).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Parse
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
parse_functions(Functions) ->
lists:map(
fun(E) ->
{function, {_, _, _, Fn}, Clauses} = E,
Arity = get_function_arity(Clauses),
parse_clauses(Fn, Clauses),
{Fn, Arity}
end,
Functions).
parse_clauses(Fn, Clauses) ->
lists:foreach(
fun(E) ->
{tree, clause, L, C} = E,
{attr, _Ln, _, _} = L,
{clause, Parameters, _, Contents} = C,
Fa = length(Parameters),
parse_contents({Fn, Fa}, Contents)
end,
Clauses).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% OLD
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
parse_contents(F, Contents) ->
{_, Res} = lists:foldl(
fun(C, {Fu, R}) ->
{Fu, R++parse_content(F, C)}
end,
{F, []},
Contents),
Res.
parse_content(F, {tree, application, L, A}) ->
{attr, _Ln, _, _} = L,
parse_application(F, A);
parse_content(F, {tree, list, _, {list, [L], Ls}}) ->
RL = parse_content(F, L),
RL++parse_content(F, Ls);
parse_content(F, {tree, tuple, _, T}) ->
parse_contents(F, T);
parse_content(F, {tree, match_expr, _, M}) ->
{match_expr, _, Value} = M,
parse_content(F, Value);
parse_content(F, {tree, try_expr, _, T}) ->
{try_expr, As, Bs, Cs, Ds} = T,
RAs = parse_contents(F, As),
RBs = parse_contents(F, Bs),
RDs = parse_contents(F, Ds),
RAs++RBs++RDs++parse_contents(F, Cs);
parse_content(F, {tree, block_expr, _, Ts}) ->
parse_contents(F, Ts);
parse_content(F, {tree, catch_expr, _, C}) ->
parse_content(F, C);
parse_content(F, {tree, case_expr, _, C}) ->
{case_expr, Case, Cases} = C,
R2 = parse_content(F, Case),
R2++parse_contents(F, Cases);
parse_content(F, {tree, if_expr, _, Cases}) ->
parse_contents(F, Cases);
parse_content(F, {tree, disjunction, _, Cases}) ->
parse_contents(F, Cases);
parse_content(F, {tree, conjunction, _, Cases}) ->
parse_contents(F, Cases);
parse_content(F, {tree, list_comp, _, L}) ->
{list_comp, A, Bs} = L,
RA = parse_content(F, A),
RA++parse_contents(F, Bs);
parse_content(F, {tree, generator, _, G}) ->
{generator, _, Gen} = G,
parse_content(F, Gen);
parse_content(F, {tree, clause, _, C}) ->
{clause, Clause, When, Second} = C,
R2 = parse_contents(F, Clause),
R3 = parse_content(F, When),
R2++R3++parse_contents(F, Second);
parse_content(F, {tree, fun_expr, _, E}) ->
parse_contents(F, E);
parse_content(F, {tree, record_expr, _, E}) ->
{record_expr, _, _, Records} = E,
parse_contents(F, Records);
parse_content(F, {tree, record_field, _, R}) ->
{record_field, F1, F2} = R,
R2 = parse_content(F, F1),
R2++parse_content(F, F2);
parse_content(F, {tree, receive_expr, _, E}) ->
{receive_expr, E1, _, _} = E,
parse_contents(F, E1);
parse_content(F, {tree, infix_expr, _, I}) ->
{infix_expr, _Operator, T1, T2} = I,
R = parse_content(F, T1),
R++parse_content(F, T2);
parse_content(_F, {tree, prefix_expr, _, _P}) ->
[];
parse_content(_F, {tree, class_qualifier, _, _}) -> [];
parse_content(_F, {tree, implicit_fun, _, _}) -> [];
parse_content(_F, {tree, record_access, _, _}) -> [];
parse_content(_F, {tree, record_index_expr, _, _}) -> [];
parse_content(_F, {tree, macro, _, _}) -> [];
parse_content(_F, {tree, binary, _, _}) -> [];
parse_content(_F, {tree, binary_generator, _, _}) -> [];
parse_content(_F, {tree, binary_comp, _, _}) -> [];
parse_content(_F, {integer, _, _I}) -> [];
parse_content(_F, {float, _, _I}) -> [];
parse_content(_F, {string, _, _S}) -> [];
parse_content(_F, {char, _, _S}) -> [];
parse_content(_F, {atom, _, _A}) -> [];
parse_content(_F, {var, _, _V}) -> [];
parse_content(_F, {nil, _}) -> [];
parse_content(_F, none) -> [];
parse_content(_F, C) -> io:format("Unknown content: ~p~n", [C]), [].
parse_application({Fn, Fa}, {application, {atom, _, Name}, Valores}) ->
Arity = length(Valores),
insert_arc_normal(Fn, Fa, Name, Arity),
Ra = [{arc_normal, Fn, Name}],
Ra++parse_contents({Fn, Fa}, Valores);
parse_application({Fn, Fa}, {application, {tree, module_qualifier, _, M}, Tree2}) ->
case M of
{module_qualifier, {_, _, Tf1}, {_, _, Tf2}} ->
ToArity = length(Tree2),
insert_arc_external(Fn, Fa, Tf1, Tf2, ToArity),
parse_contents({Fn, Fa}, Tree2);
_Other ->
%%io:format("Unknown application module_qualifier: ~p~n", [M]),
parse_contents({Fn, Fa}, Tree2)
end;
parse_application({Fn, Fa}, {application, {tree, record_access, _, _}, Tree2}) ->
parse_contents({Fn, Fa}, Tree2);
parse_application({Fn, Fa}, {application, {var, _, _}, Tree2}) ->
parse_contents({Fn, Fa}, Tree2);
parse_application({Fn, Fa}, {application, Other, Tree2}) ->
io:format("Unknown application tree: ~p~n", [Other]),
parse_contents({Fn, Fa}, Tree2).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Textize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
textize(ModuleName, Exports, Privates, AppExternals, ExmppExternals, OTPExternals) ->
ExportsS = textize_exports(Exports),
PrivatesS = textize_exports(Privates),
AppExternalsS = textize_externals(AppExternals),
ExmppExternalsS = textize_externals(ExmppExternals),
OTPExternalsS = textize_externals(OTPExternals),
Arcs = textize_arcs(),
io_lib:format(
"digraph ~p {~n"++
" label = \"Module ~p\";~n"++
" labelloc = \"t\";~n"++
" fontname = Helvetica;~n"++
" rankdir = LR;~n"++
" ratio = fill;~n"++
%%" node [shape = box, style = filled, color = olivedrab1, fontsize=40];~s~n"++
%%" node [shape = parallelogram, style = filled, color = rosybrown1, fontsize=40];~s~n"++
%%" node [shape = ellipse, style = filled, color = slategray1, peripheries=3, fontsize=40];~n"++
" node [shape = box, color=darkgreen, fillcolor=Honeydew, style=filled, href=\"PRI~p.html#\\N\"];~s~n"++
" node [shape = box, color=darkgreen, fillcolor=PaleGreen, style=filled, href=\"EXP~p.html#\\N\"];~s~n"++
" node [shape = box, color=darkgreen, fillcolor=Aquamarine, style=filled, href=\"APP\\N\"];~s~n"++
" node [shape = box, color=darkblue, fillcolor=LightSkyBlue,style=filled, href=\"EXM\\N\"];~s~n"++
" node [shape = box, color=darkred, fillcolor=PeachPuff, style=filled, href=\"OTP\\N\"];~s~n"++
" node [shape = box];~n"++
"~s"++
"}~n",
[ModuleName, ModuleName,
ModuleName, PrivatesS,
ModuleName, ExportsS,
AppExternalsS,
ExmppExternalsS,
OTPExternalsS,
Arcs]).
textize_exports(Exports) ->
lists:foldl(
fun({Func, Arity}, R) ->
string:concat(R, io_lib:format(" \"~p/~p\";", [Func, Arity]))
end,
"",
Exports).
textize_externals(Externals) ->
lists:foldl(
fun({Mod, Func, Arity}, R) ->
string:concat(R, io_lib:format(" \"~p:~p/~p\";", [Mod, Func, Arity]));
({Func, Arity}, R) ->
string:concat(R, io_lib:format(" \"~p/~p\";", [Func, Arity]))
end,
"",
Externals).
textize_arcs() ->
Id = ets:first(arcs),
textize_arcs(Id, []).
textize_arcs('$end_of_table', Res) -> Res;
textize_arcs(Id, Res) ->
[Arc] = read_arc(Id),
From = mfa_prepare(Arc#arcs.from),
To = mfa_prepare(Arc#arcs.to),
Edge_attrs = check_loop(From, To)++check_occu(Arc#arcs.occ)++check_external(Arc#arcs.to),
Res2 = io_lib:format(" ~s -> ~s~s;~n", [From, To, Edge_attrs]),
Id_next = ets:next(arcs, Id),
textize_arcs(Id_next, string:concat(Res2, Res)).
get_func_calls() ->
Id = ets:first(arcs),
get_func_calls(Id, []).
get_func_calls('$end_of_table', Res) -> Res;
get_func_calls(Id, Res) ->
[Arc] = read_arc(Id),
MFA = Arc#arcs.to,
Call = MFA,
Id_next = ets:next(arcs, Id),
get_func_calls(Id_next, [Call | Res]).
mfa_prepare(MFAinitial) ->
MFA = try_mfa_conversion(MFAinitial),
Mod = case MFA#mfa.mod of
-1 -> "\"";
M -> io_lib:format("\"~p:", [M])
end,
Func = io_lib:format("~p", [MFA#mfa.func]),
Arity = case MFA#mfa.arity of
-1 -> "\"";
A -> io_lib:format("/~p\"", [A])
end,
string:concat(Mod, string:concat(Func, Arity)).
%% noexternal | app | exmpp | other
mfa_to_externaltype(MFA, ModuleName, AppModules, Functions) ->
case MFA of
{mfa, -1, Fu, Ar} ->
case {is_internal, lists:member({Fu, Ar}, Functions)} of
{is_internal, true} ->
{noexternal, {Fu, Ar}};
{is_internal, false} ->
store_mfa_conversion(MFA, {mfa, -1, Fu, Ar}),
{other, {Fu, Ar}}
end;
{mfa, Mo, Fu, Ar} when Mo == ModuleName ->
store_mfa_conversion(MFA, {mfa, -1, Fu, Ar}),
{noexternal, {Fu, Ar}};
{mfa, Mo, Fu, Ar} ->
Type = case {is_app, lists:member(Mo, AppModules)} of
{is_app, true} -> app;
{is_app, false} ->
case string:str(atom_to_list(Mo), "exmpp") of
0 -> other;
N when is_integer(N) -> exmpp
end
end,
{Type, {Mo, Fu, Ar}}
end.
get_function_arity([{tree, clause, _, {clause, Vars, _, _}} | _]) ->
length(Vars);
get_function_arity(E) ->
io:format("Unknown function arity: ~p~n", [E]).
store_mfa_conversion(MFA1, MFA2) ->
ets:insert(mfa_conversion, {MFA1, MFA2}).
try_mfa_conversion(MFA) ->
case ets:lookup(mfa_conversion, MFA) of
[{MFA,MFA2}] ->
MFA2;
[] ->
MFA
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Utils
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%check_loop(I, I) -> " [color = sandybrown]";
check_loop(I, I) -> "";
check_loop(_, _) -> "".
check_occu(1) -> "";
check_occu(Occ) -> io_lib:format(" [label=\"~p\"]", [Occ]).
check_external(To) ->
case To#mfa.mod of
-1 -> " [style = bold]";
_ -> ""
end.
+115
View File
@@ -0,0 +1,115 @@
div.navbar table tr td a[target="_parent"] {
background: transparent url("ejabberd-devdoc.png") no-repeat;
display: block;
font-size: 0%;
top: 0;
left: 0;
padding: 0;
margin: 0;
width: 192px;
height: 42px;
}
div.navbar table tr td a img {
border: 0;
padding: 0 0 0 10;
float: right;
}
p i {
display: none;
}
html, body {
font-family: Verdana, sans-serif;
color: #000;
background-color: #fff;
}
h1 {
font-size: 20px;
color: #4a5389;
border-bottom: solid 1px #000;
}
h2 {
font-size: 18px;
text-align: right;
color: #4a5389;
border-bottom: 1px solid #000;
}
h3 {
font-size: 16px;
color: #900;
}
h4 {
font-size: 14px;
color: #000;
}
a[href] {
color: #4a5389;
}
a[href]:hover {
background-color: #ecefff;
}
p, li, dd {
text-align: justify;
}
li {
margin-top: 0.3em;
}
li:first-child {
margin-top: 0px;
}
blockquote {
color: #555;
}
caption {
font-style: italic;
color: #009;
text-align: left;
margin-left: 20px;
}
table[border="1"] {
border-collapse: collapse;
margin-bottom: 1em;
}
table[border="1"] td {
border: 1px solid #ddd;
}
pre, tt, code {
color: #461b7e;
}
pre {
margin:1ex 2ex;
border:1px dashed lightgrey;
background-color:#f9f9f9;
padding:0.5ex;
}
pre em {
font-style: normal;
font-weight: bold;
}
dt {
margin:0ex 2ex;
font-weight:bold;
}
dd {
margin:0ex 0ex 1ex 4ex;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

+131
View File
@@ -0,0 +1,131 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>Ejabberd 3.0.0-prealpha Feature Sheet
</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<META name="GENERATOR" content="hevea 1.10">
<STYLE type="text/css">
.li-itemize{margin:1ex 0ex;}
.li-enumerate{margin:1ex 0ex;}
.dd-description{margin:0ex 0ex 1ex 4ex;}
.dt-description{margin:0ex;}
.toc{list-style:none;}
.thefootnotes{text-align:left;margin:0ex;}
.dt-thefootnotes{margin:0em;}
.dd-thefootnotes{margin:0em 0em 0em 2em;}
.footnoterule{margin:1em auto 1em 0px;width:50%;}
.caption{padding-left:2ex; padding-right:2ex; margin-left:auto; margin-right:auto}
.title{margin:2ex auto;text-align:center}
.center{text-align:center;margin-left:auto;margin-right:auto;}
.flushleft{text-align:left;margin-left:0ex;margin-right:auto;}
.flushright{text-align:right;margin-left:auto;margin-right:0ex;}
DIV TABLE{margin-left:inherit;margin-right:inherit;}
PRE{text-align:left;margin-left:0ex;margin-right:auto;}
BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
TD P{margin:0px;}
.boxed{border:1px solid black}
.textboxed{border:1px solid black}
.vbar{border:none;width:2px;background-color:black;}
.hbar{border:none;height:2px;width:100%;background-color:black;}
.hfill{border:none;height:1px;width:200%;background-color:black;}
.vdisplay{border-collapse:separate;border-spacing:2px;width:auto; empty-cells:show; border:2px solid red;}
.vdcell{white-space:nowrap;padding:0px;width:auto; border:2px solid green;}
.display{border-collapse:separate;border-spacing:2px;width:auto; border:none;}
.dcell{white-space:nowrap;padding:0px;width:auto; border:none;}
.dcenter{margin:0ex auto;}
.vdcenter{border:solid #FF8000 2px; margin:0ex auto;}
.minipage{text-align:left; margin-left:0em; margin-right:auto;}
.marginpar{border:solid thin black; width:20%; text-align:left;}
.marginparleft{float:left; margin-left:0ex; margin-right:1ex;}
.marginparright{float:right; margin-left:1ex; margin-right:0ex;}
.theorem{text-align:left;margin:1ex auto 1ex 0ex;}
.part{margin:2ex auto;text-align:center}
SPAN{width:20%; float:right; text-align:left; margin-left:auto;}
</STYLE>
</HEAD>
<BODY >
<!--HEVEA command line is: /usr/bin/hevea -fix -pedantic features.tex -->
<!--CUT DEF section 1 --><P><A NAME="titlepage"></A>
</P><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Ejabberd 3.0.0-prealpha Feature Sheet</H1><H3 CLASS="titlerest">Sander Devrieze<BR>
<A HREF="mailto:s.devrieze@pandora.be"><TT>mailto:s.devrieze@pandora.be</TT></A><BR>
<A HREF="xmpp:sander@devrieze.dyndns.org"><TT>xmpp:sander@devrieze.dyndns.org</TT></A></H3></TD></TR>
</TABLE><DIV CLASS="center">
<IMG SRC="logo.png" ALT="logo.png">
</DIV><BLOCKQUOTE CLASS="quotation"><FONT COLOR="#921700"><I>I can thoroughly recommend ejabberd for ease of setup &#X2013;
Kevin Smith, Current maintainer of the Psi project</I></FONT></BLOCKQUOTE><P>Introduction
<A NAME="intro"></A></P><BLOCKQUOTE CLASS="quotation"><FONT COLOR="#921700"><I>I just tried out ejabberd and was impressed both by ejabberd itself and the language it is written in, Erlang. &#X2014;
Joeri</I></FONT></BLOCKQUOTE><P><TT>ejabberd</TT> is a <B><FONT SIZE=4><FONT COLOR="#001376">free and open source</FONT></FONT></B> instant messaging server written in <A HREF="http://www.erlang.org/">Erlang/OTP</A>.</P><P><TT>ejabberd</TT> is <B><FONT SIZE=4><FONT COLOR="#001376">cross-platform</FONT></FONT></B>, distributed, fault-tolerant, and based on open standards to achieve real-time communication.</P><P><TT>ejabberd</TT> is designed to be a <B><FONT SIZE=4><FONT COLOR="#001376">rock-solid and feature rich</FONT></FONT></B> XMPP server.</P><P><TT>ejabberd</TT> is suitable for small deployments, whether they need to be <B><FONT SIZE=4><FONT COLOR="#001376">scalable</FONT></FONT></B> or not, as well as extremely big deployments.</P><!--TOC section Key Features-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc1"></A>Key Features</H2><!--SEC END --><P>
<A NAME="keyfeatures"></A>
</P><BLOCKQUOTE CLASS="quotation"><FONT COLOR="#921700"><I>Erlang seems to be tailor-made for writing stable, robust servers. &#X2014;
Peter Saint-Andr&#XE9;, Executive Director of the Jabber Software Foundation</I></FONT></BLOCKQUOTE><P><TT>ejabberd</TT> is:
</P><UL CLASS="itemize"><LI CLASS="li-itemize">
<B><FONT SIZE=4><FONT COLOR="#001376">Cross-platform:</FONT></FONT></B> <TT>ejabberd</TT> runs under Microsoft Windows and Unix derived systems such as Linux, FreeBSD and NetBSD.</LI><LI CLASS="li-itemize"><B><FONT SIZE=4><FONT COLOR="#001376">Distributed:</FONT></FONT></B> You can run <TT>ejabberd</TT> on a cluster of machines and all of them will serve the same Jabber domain(s). When you need more capacity you can simply add a new cheap node to your cluster. Accordingly, you do not need to buy an expensive high-end machine to support tens of thousands concurrent users.</LI><LI CLASS="li-itemize"><B><FONT SIZE=4><FONT COLOR="#001376">Fault-tolerant:</FONT></FONT></B> You can deploy an <TT>ejabberd</TT> cluster so that all the information required for a properly working service will be replicated permanently on all nodes. This means that if one of the nodes crashes, the others will continue working without disruption. In addition, nodes also can be added or replaced &#X2018;on the fly&#X2019;.</LI><LI CLASS="li-itemize"><B><FONT SIZE=4><FONT COLOR="#001376">Administrator Friendly:</FONT></FONT></B> <TT>ejabberd</TT> is built on top of the Open Source Erlang. As a result you do not need to install an external database, an external web server, amongst others because everything is already included, and ready to run out of the box. Other administrator benefits include:
<UL CLASS="itemize"><LI CLASS="li-itemize">
Comprehensive documentation.
</LI><LI CLASS="li-itemize">Straightforward installers for Linux, Mac OS X, and Windows. </LI><LI CLASS="li-itemize">Web Administration.
</LI><LI CLASS="li-itemize">Shared Roster Groups.
</LI><LI CLASS="li-itemize">Command line administration tool. </LI><LI CLASS="li-itemize">Can integrate with existing authentication mechanisms.
</LI><LI CLASS="li-itemize">Capability to send announce messages.
</LI></UL></LI><LI CLASS="li-itemize"><B><FONT SIZE=4><FONT COLOR="#001376">Internationalized:</FONT></FONT></B> <TT>ejabberd</TT> leads in internationalization. Hence it is very well suited in a globalized world. Related features are:
<UL CLASS="itemize"><LI CLASS="li-itemize">
Translated to 24 languages. </LI><LI CLASS="li-itemize">Support for <A HREF="http://www.ietf.org/rfc/rfc3490.txt">IDNA</A>.
</LI></UL></LI><LI CLASS="li-itemize"><B><FONT SIZE=4><FONT COLOR="#001376">Open Standards:</FONT></FONT></B> <TT>ejabberd</TT> is the first Open Source Jabber server claiming to fully comply to the XMPP standard.
<UL CLASS="itemize"><LI CLASS="li-itemize">
Fully XMPP compliant.
</LI><LI CLASS="li-itemize">XML-based protocol.
</LI><LI CLASS="li-itemize"><A HREF="http://www.ejabberd.im/protocols">Many protocols supported</A>.
</LI></UL></LI></UL><!--TOC section Additional Features-->
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc2"></A>Additional Features</H2><!--SEC END --><P>
<A NAME="addfeatures"></A>
</P><BLOCKQUOTE CLASS="quotation"><FONT COLOR="#921700"><I>ejabberd is making inroads to solving the "buggy incomplete server" problem &#X2014;
Justin Karneges, Founder of the Psi and the Delta projects</I></FONT></BLOCKQUOTE><P>Moreover, <TT>ejabberd</TT> comes with a wide range of other state-of-the-art features:
</P><UL CLASS="itemize"><LI CLASS="li-itemize">
Modular
<UL CLASS="itemize"><LI CLASS="li-itemize">
Load only the modules you want.
</LI><LI CLASS="li-itemize">Extend <TT>ejabberd</TT> with your own custom modules.
</LI></UL>
</LI><LI CLASS="li-itemize">Security
<UL CLASS="itemize"><LI CLASS="li-itemize">
SASL and STARTTLS for c2s and s2s connections.
</LI><LI CLASS="li-itemize">STARTTLS and Dialback s2s connections.
</LI><LI CLASS="li-itemize">Web Admin accessible via HTTPS secure access.
</LI></UL>
</LI><LI CLASS="li-itemize">Databases
<UL CLASS="itemize"><LI CLASS="li-itemize">
Internal database for fast deployment (Mnesia).
</LI><LI CLASS="li-itemize">Native MySQL support.
</LI><LI CLASS="li-itemize">Native PostgreSQL support.
</LI><LI CLASS="li-itemize">ODBC data storage support.
</LI><LI CLASS="li-itemize">Microsoft SQL Server support. </LI></UL>
</LI><LI CLASS="li-itemize">Authentication
<UL CLASS="itemize"><LI CLASS="li-itemize">
Internal Authentication.
</LI><LI CLASS="li-itemize">PAM, LDAP and ODBC. </LI><LI CLASS="li-itemize">External Authentication script.
</LI></UL>
</LI><LI CLASS="li-itemize">Others
<UL CLASS="itemize"><LI CLASS="li-itemize">
Support for virtual hosting.
</LI><LI CLASS="li-itemize">Compressing XML streams with Stream Compression (<A HREF="http://www.xmpp.org/extensions/xep-0138.html">XEP-0138</A>).
</LI><LI CLASS="li-itemize">Statistics via Statistics Gathering (<A HREF="http://www.xmpp.org/extensions/xep-0039.html">XEP-0039</A>).
</LI><LI CLASS="li-itemize">IPv6 support both for c2s and s2s connections.
</LI><LI CLASS="li-itemize"><A HREF="http://www.xmpp.org/extensions/xep-0045.html">Multi-User Chat</A> module with support for clustering and HTML logging. </LI><LI CLASS="li-itemize">Users Directory based on users vCards.
</LI><LI CLASS="li-itemize"><A HREF="http://www.xmpp.org/extensions/xep-0060.html">Publish-Subscribe</A> component with support for <A HREF="http://www.xmpp.org/extensions/xep-0163.html">Personal Eventing via Pubsub</A>.
</LI><LI CLASS="li-itemize">Support for web clients: <A HREF="http://www.xmpp.org/extensions/xep-0025.html">HTTP Polling</A> and <A HREF="http://www.xmpp.org/extensions/xep-0206.html">HTTP Binding (BOSH)</A> services.
</LI><LI CLASS="li-itemize">Component support: interface with networks such as AIM, ICQ and MSN installing special tranports.
</LI></UL>
</LI></UL><!--CUT END -->
<!--HTMLFOOT-->
<!--ENDHTML-->
<!--FOOTER-->
<HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by
</EM><A HREF="http://hevea.inria.fr/index.html"><EM>H</EM><EM><FONT SIZE=2><sup>E</sup></FONT></EM><EM>V</EM><EM><FONT SIZE=2><sup>E</sup></FONT></EM><EM>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY>
</HTML>
+136
View File
@@ -0,0 +1,136 @@
\documentclass[a4paper,10pt]{article}
%% Packages
\usepackage{epsfig}
\usepackage{fancyhdr}
\usepackage{graphics}
\usepackage{hevea}
\usepackage[pdftex,colorlinks,unicode,urlcolor=blue,linkcolor=blue,pdftitle=Ejabberd\
Feature\ Sheet,pdfauthor=Sander\
Devrieze,pdfsubject=ejabberd,pdfkeywords=ejabberd]{hyperref}
\usepackage{verbatim}
\usepackage{color}
%% Index
% Remove the index anchors from the HTML version to save size and bandwith.
\newcommand{\ind}[1]{\begin{latexonly}\index{#1}\end{latexonly}}
%% Images
\newcommand{\logoscale}{0.7}
\newcommand{\imgscale}{0.58}
\newcommand{\insimg}[1]{\insscaleimg{\imgscale}{#1}}
\newcommand{\insscaleimg}[2]{
\imgsrc{#2}{}
\begin{latexonly}
\scalebox{#1}{\includegraphics{#2}}
\end{latexonly}
}
%% Various
\newcommand{\bracehack}{\def\{{\char"7B}\def\}{\char"7D}}
\newcommand{\titem}[1]{\item[\bracehack\texttt{#1}]}
\newcommand{\ns}[1]{\texttt{#1}}
\newcommand{\jid}[1]{\texttt{#1}}
\newcommand{\option}[1]{\texttt{#1}}
\newcommand{\poption}[1]{{\bracehack\texttt{#1}}}
\newcommand{\node}[1]{\texttt{#1}}
\newcommand{\term}[1]{\texttt{#1}}
\newcommand{\shell}[1]{\texttt{#1}}
\newcommand{\ejabberd}{\texttt{ejabberd}}
\newcommand{\Jabber}{Jabber}
%% Title page
\include{version}
\title{Ejabberd \version\ Feature Sheet}
\author{Sander Devrieze \\
\ahrefurl{mailto:s.devrieze@pandora.be} \\
\ahrefurl{xmpp:sander@devrieze.dyndns.org}}
% Options
\newcommand{\marking}[1]{\textbf{\begin{large}\textcolor{ejblue}{#1}\end{large}}} % Marking enabled
\newcommand{\quoting}[2][yozhik]{\begin{quotation}\textcolor{#1}{\textit{#2}}\end{quotation}} % Quotes enabled
\newcommand{\new}{\marginpar{\textcolor{red}{\textsc{new}}}} % Highlight new features
\newcommand{\improved}{\marginpar{\textcolor{orange}{\textsc{improved}}}} % Highlight improved features
\setcounter{secnumdepth}{-1} % Disable section numbering
%% To by-pass errors in the HTML version.
\newstyle{SPAN}{width:20\%; float:right; text-align:left; margin-left:auto;}
\definecolor{orange} {cmyk}{0.000,0.333,1.000,0.000}
%% Footnotes
\begin{latexonly}
\global\parskip=9pt plus 3pt minus 1pt
\global\parindent=0pt
\gdef\ahrefurl#1{\href{#1}{\texttt{#1}}}
\gdef\footahref#1#2{#2\footnote{\href{#1}{\texttt{#1}}}}
\end{latexonly}
\newcommand{\txepref}[2]{\footahref{http://www.xmpp.org/extensions/xep-#1.html}{#2}}
\newcommand{\xepref}[1]{\txepref{#1}{XEP-#1}}
%% Fancy header
\fancyhf{}
\pagestyle{fancy}
\rhead{\textcolor{ejblue}{The Expandable Jabber/XMPP Daemon.}}
\renewcommand{\headrule}{{\color{ejblue}%
\hrule width\headwidth height\headrulewidth \vskip-\headrulewidth}}
\lhead{\setlength{\unitlength}{-6mm}
\begin{picture}(0,0)
\put(5.8,3.25){\includegraphics[width=1.3\textwidth]{yozhikheader.png}}
\end{picture}}
% Official ejabberd colours
\definecolor{ejblue} {cmyk}{1.000,0.831,0.000,0.537} %RGB: 0,0,118 HTML: 000076
\definecolor{ejgreenyellow}{cmyk}{0.079,0.000,0.275,0.102} %RGB: 209,229,159 HTML: d1e59f
\definecolor{ejgreendark} {cmyk}{0.131,0.000,0.146,0.220} %RGB: 166,199,162 HTML: a6c7a2
\definecolor{ejgreen} {cmyk}{0.077,0.000,0.081,0.078} %RGB: 216,236,215 HTML: d8ecd7
\definecolor{ejgreenwhite} {cmyk}{0.044,0.000,0.048,0.020} %RGB: 239,250,238 HTML: effaee
\definecolor{yozhik} {cmyk}{0.000,0.837,1.000,0.424} %RGB: 147,0,0 HTML: 930000
\begin{document}
\label{titlepage}
\begin{titlepage}
\maketitle{}
\thispagestyle{empty}
\begin{center}
{\insscaleimg{\logoscale}{logo.png}
\par
}
\end{center}
\quoting{I can thoroughly recommend ejabberd for ease of setup --
Kevin Smith, Current maintainer of the Psi project}
\end{titlepage}
\newpage
% Set the page counter to 2 so that the titlepage and the second page do not
% have the same page number. This fixes the PDFLaTeX warning "destination with
% the same identifier".
\begin{latexonly}
\setcounter{page}{2}
\pagecolor{ejgreenwhite}
\end{latexonly}
% Input introduction.tex
\input{introduction}
\end{document}
%% TODO
% * illustrations (e.g. screenshot from web interface)
% * commented parts
% * slides, guide and html version
% * cleaning and improving LaTeX code
% * key features: something like this (shorter)? (more focussed on Erlang now): "To reach the goal of high
% availability, performance and clustering, ejabberd is written in Erlang, a programming language perfectly
% suited for this. Besides that, some parts are written in C to also incude the advantages of this language. In
% short, ejabberd is a perfect mix of mainly Erlang code, peppered with some C code to get the final touch!"
% <picture of a cocktail>
% * key features: saying that ejabberd the only XMPP server is that can do real clustering:
% http://www.jivesoftware.org/forums/thread.jspa?threadID=14602
% "What I find interesting is that *no* XMPP servers truly provide clustering. This includes all the commercial
% servers. The one partial exception appears to be ejabberd, which can cluster certain data such as sessions,
% but not all services such as MUC."
% * try it today: links to migration tutorials
+105
View File
@@ -0,0 +1,105 @@
digraph messages {
//concentrate=true;
subgraph clusterclients {
client1 [shape = box];
client2 [shape = box];
client3 [shape = box];
style = dashed;
label = "Clients";
}
subgraph clusternode1 {
subgraph clusterc2s1 {
c2s11;
c2s12;
style = invis;
}
subgraph clusterservices1 {
service11;
service12;
service13;
style = invis;
}
//subgraph clusters2s1 {
//s2s11;
//s2s12;
//style = invis;
//}
c2s11 -> auth1;
c2s12 -> auth1;
auth1 -> c2s11;
auth1 -> c2s12;
c2s11 -> sm1;
c2s11 -> router1;
c2s12 -> sm1;
c2s12 -> router1;
router1 -> local1;
router1 -> service11;
router1 -> service12;
router1 -> service13;
router1 -> s2s11;
router1 -> s2s12;
service11 -> router1;
service12 -> router1;
service13 -> router1;
s2s11 -> router1;
s2s12 -> router1;
local1 -> sm1;
sm1 -> c2s11;
sm1 -> c2s12;
style = dashed;
label = "Node1";
}
subgraph clusternode2 {
c2s2 -> auth2;
auth2 -> c2s2;
c2s2 -> sm2;
c2s2 -> router2;
router2 -> local2;
router2 -> service21;
router2 -> s2s21;
service21 -> router2;
s2s21 -> router2;
local2 -> sm2;
sm2 -> c2s2;
style = dashed;
label = "Node2";
}
subgraph clusterservers {
server1 [shape = box];
server2 [shape = box];
server3 [shape = box];
style = dashed;
label = "Servers";
}
client1 -> c2s11;
client2 -> c2s12;
client3 -> c2s2;
c2s11 -> client1 [constraint=false];
c2s12 -> client2 [constraint=false];
c2s2 -> client3 [constraint=false];
s2s11 -> server1 [minlen = 2];
s2s12 -> server2 [minlen = 2];
s2s21 -> server3 [minlen = 2];
server1 -> s2s11 [constraint=false];
server2 -> s2s12 [constraint=false];
server3 -> s2s21 [constraint=false];
router1 -> router2;
router2 -> router1;
sm1 -> sm2;
sm2 -> sm1;
label = "Data Flows";
}
+4174
View File
File diff suppressed because it is too large Load Diff
+5452
View File
File diff suppressed because it is too large Load Diff
+132
View File
@@ -0,0 +1,132 @@
\chapter{Introduction}
\label{intro}
%% TODO: improve the feature sheet with a nice table to highlight new features.
\quoting{I just tried out ejabberd and was impressed both by ejabberd itself and the language it is written in, Erlang. ---
Joeri}
%ejabberd is a free and open source instant messaging server written in Erlang. ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication (Jabber/XMPP).
\ejabberd{} is a \marking{free and open source} instant messaging server written in \footahref{http://www.erlang.org/}{Erlang/OTP}.
\ejabberd{} is \marking{cross-platform}, distributed, fault-tolerant, and based on open standards to achieve real-time communication.
\ejabberd{} is designed to be a \marking{rock-solid and feature rich} XMPP server.
\ejabberd{} is suitable for small deployments, whether they need to be \marking{scalable} or not, as well as extremely big deployments.
%\subsection{Layout with example deployment (title needs a better name)}
%\label{layout}
%In this section there will be a graphical overview like these:\\
%\verb|http://www.tipic.com/var/timp/timp_dep.gif| \\
%\verb|http://www.jabber.com/images/jabber_Com_Platform.jpg| \\
%\verb|http://www.antepo.com/files/OPN45systemdatasheet.pdf| \\
%A page full with names of Jabber client that are known to work with ejabberd. \begin{tiny}tiny font\end{tiny}
%\subsection{Try It Today}
%\label{trytoday}
%(Not sure if I will include/finish this section for the next version.)
%\begin{itemize}
%\item Erlang REPOS
%\item Packages in distributions
%\item Windows binary
%\item source tar.gz
%\item Migration from Jabberd14 (and so also Jabberd2 because you can migrate from version 2 back to 14) and Jabber Inc. XCP possible.
%\end{itemize}
\newpage
\section{Key Features}
\label{keyfeatures}
\ind{features!key features}
\quoting{Erlang seems to be tailor-made for writing stable, robust servers. ---
Peter Saint-Andr\'e, Executive Director of the Jabber Software Foundation}
\ejabberd{} is:
\begin{itemize}
\item \marking{Cross-platform:} \ejabberd{} runs under Microsoft Windows and Unix derived systems such as Linux, FreeBSD and NetBSD.
\item \marking{Distributed:} You can run \ejabberd{} on a cluster of machines and all of them will serve the same \Jabber{} domain(s). When you need more capacity you can simply add a new cheap node to your cluster. Accordingly, you do not need to buy an expensive high-end machine to support tens of thousands concurrent users.
\item \marking{Fault-tolerant:} You can deploy an \ejabberd{} cluster so that all the information required for a properly working service will be replicated permanently on all nodes. This means that if one of the nodes crashes, the others will continue working without disruption. In addition, nodes also can be added or replaced `on the fly'.
\item \marking{Administrator Friendly:} \ejabberd{} is built on top of the Open Source Erlang. As a result you do not need to install an external database, an external web server, amongst others because everything is already included, and ready to run out of the box. Other administrator benefits include:
\begin{itemize}
\item Comprehensive documentation.
\item Straightforward installers for Linux, Mac OS X, and Windows. %%\improved{}
\item Web Administration.
\item Shared Roster Groups.
\item Command line administration tool. %%\improved{}
\item Can integrate with existing authentication mechanisms.
\item Capability to send announce messages.
\end{itemize}
\item \marking{Internationalized:} \ejabberd{} leads in internationalization. Hence it is very well suited in a globalized world. Related features are:
\begin{itemize}
\item Translated to 24 languages. %%\improved{}
\item Support for \footahref{http://www.ietf.org/rfc/rfc3490.txt}{IDNA}.
\end{itemize}
\item \marking{Open Standards:} \ejabberd{} is the first Open Source Jabber server claiming to fully comply to the XMPP standard.
\begin{itemize}
\item Fully XMPP compliant.
\item XML-based protocol.
\item \footahref{http://www.ejabberd.im/protocols}{Many protocols supported}.
\end{itemize}
\end{itemize}
\newpage
\section{Additional Features}
\label{addfeatures}
\ind{features!additional features}
\quoting{ejabberd is making inroads to solving the "buggy incomplete server" problem ---
Justin Karneges, Founder of the Psi and the Delta projects}
Moreover, \ejabberd{} comes with a wide range of other state-of-the-art features:
\begin{itemize}
\item Modular
\begin{itemize}
\item Load only the modules you want.
\item Extend \ejabberd{} with your own custom modules.
\end{itemize}
\item Security
\begin{itemize}
\item SASL and STARTTLS for c2s and s2s connections.
\item STARTTLS and Dialback s2s connections.
\item Web Admin accessible via HTTPS secure access.
\end{itemize}
\item Databases
\begin{itemize}
\item Internal database for fast deployment (Mnesia).
\item Native MySQL support.
\item Native PostgreSQL support.
\item ODBC data storage support.
\item Microsoft SQL Server support. %%\new{}
\end{itemize}
\item Authentication
\begin{itemize}
\item Internal Authentication.
\item PAM, LDAP and ODBC. %%\improved{}
\item External Authentication script.
\end{itemize}
\item Others
\begin{itemize}
\item Support for virtual hosting.
\item Compressing XML streams with Stream Compression (\xepref{0138}).
\item Statistics via Statistics Gathering (\xepref{0039}).
\item IPv6 support both for c2s and s2s connections.
\item \txepref{0045}{Multi-User Chat} module with support for clustering and HTML logging. %%\improved{}
\item Users Directory based on users vCards.
\item \txepref{0060}{Publish-Subscribe} component with support for \txepref{0163}{Personal Eventing via Pubsub}.
\item Support for web clients: \txepref{0025}{HTTP Polling} and \txepref{0206}{HTTP Binding (BOSH)} services.
\item Component support: interface with networks such as AIM, ICQ and MSN installing special tranports.
\end{itemize}
\end{itemize}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

+62
View File
@@ -0,0 +1,62 @@
Release notes
ejabberd 0.9.1
This document describes the main changes from [25]ejabberd 0.9.
The code can be downloaded from the [26]download page.
For more detailed information, please refer to ejabberd [27]User Guide.
Groupchat (Multi-user chat and IRC) improvements
The multi-user chat code has been improved to comply with the latest version
of Jabber Enhancement Proposal 0045.
The IRC (Internet Relay Chat) features now support WHOIS and USERINFO
requests.
Web interface
ejabberd modules management features have been added to the web interface.
They now allow to start or stop extension module without restarting the
ejabberd server.
Publish and subscribe
It is now possible to a subscribe node with a JabberID that includes a
resource.
Translations
A new script has been included to help translate ejabberd into new languages
and maintain existing translations.
As a result, ejabberd is now translating into 10 languages:
* Dutch
* English
* French
* German
* Polish
* Portuguese
* Russian
* Spanish
* Swedish
* Ukrainian
Migration
No changes have been made to the database. No particular conversion steps
are needed. However, you should backup your database before upgrading to a
new ejabberd version.
Bugfixes
This release contains several bugfixes and architectural changes. Please
refer to the Changelog file supplied with this release for details of all
improvements in the ejabberd code.
+99
View File
@@ -0,0 +1,99 @@
Release notes
ejabberd 0.9.8
2005-08-01
This document describes the main changes in ejabberd 0.9.8. This
version prepares the way for the release of ejabberd 1.0, which
is due later this year.
The code can be downloaded from the Process-one website:
http://www.process-one.net/en/projects/ejabberd/
For more detailed information, please refer to ejabberd User Guide
on the Process-one website:
http://www.process-one.net/en/projects/ejabberd/docs.html
Recent changes include....
Enhanced virtual hosting
Virtual hosting applies to many more setting options and
features and is transparent. Virtual hosting accepts different
parameters for different virtual hosts regarding the following
features: authentication method, access control lists and access
rules, users management, statistics, and shared roster. The web
interface gives access to each virtual host's parameters.
Enhanced Publish-Subscribe module
ejabberd's Publish-Subscribe module integrates enhancements
coming from J-EAI, an XMPP-based integration server built on
ejabberd. ejabberd thus supports Publish-Subscribe node
configuration. It is possible to define nodes that should be
persistent, and the number of items to persist. Besides that, it
is also possible to define various notification parameters, such
as the delivery of the payload with the notifications, and the
notification of subscribers when some changes occur on items.
Other examples are: the maximum size of the items payload, the
subscription approvers, the limitation of the notification to
online users only, etc.
Code reorganisation and update
- The mod_register module has been cleaned up.
- ODBC support has been updated and several bugs have been fixed.
Development API
To ease the work of Jabber/XMPP developers, a filter_packet hook
has been added. As a result it is possible to develop plugins to
filter or modify packets flowing through ejabberd.
Translations
- Translations have been updated to support the new Publish-Subscribe features.
- A new Brazilian Portuguese translation has been contributed.
Web interface
- The CSS stylesheet from the web interface is W3C compliant.
Installers
Installers are provided for Microsoft Windows and Linux/x86. The
Linux installer includes Erlang ASN.1 modules for LDAP
authentication support.
Bugfixes
- This release contains several bugfixes and architectural
changes. Among other bugfixes include improvements in LDAP
authentication. Please refer to the ChangeLog file supplied
with this release regarding all improvements in ejabberd.
References
The ejabberd feature sheet helps comparing with other Jabber/XMPP
servers:
http://www.process-one.net/en/projects/ejabberd/docs/features.pdf
Contributed tutorials of interest are:
- Migration from Jabberd1.4 to ejabberd:
http://ejabberd.jabber.ru/jabberd1-to-ejabberd
- Migration from Jabberd2 to ejabberd:
http://ejabberd.jabber.ru/jabberd2-to-ejabberd
- Transport configuration for connecting to other networks:
http://ejabberd.jabber.ru/tutorials-transports
END
+88
View File
@@ -0,0 +1,88 @@
Release notes
ejabberd 0.9
This document describes the major new features of and changes to
ejabberd 0.9, compared to latest public release ejabber 0.7.5.
For more detailed information, please refer to ejabberd User
Guide.
Virtual Hosting
ejabberd now can host several domain on the same instance.
This option is enabled by using:
{hosts, ["erlang-projects.org", "erlang-fr.org"]}.
instead of the previous host directive.
Note that you are now using a list of hosts. The main one should
be the first listed. See migration section further in this release
note for details.
Shared Roster
Shared roster is a new feature that allow the ejabberd
administrator to add jabber user that will be present in the
roster of every users on the server.
Shared roster are enabled by adding:
{mod_shared_roster, []}
at the end of your module list in your ejabberd.cfg file.
PostgreSQL (ODBC) support
This feature is experimental and not yet properly documented. This
feature is released for testing purpose.
You need to have Erlang/OTP R10 to compile with ODBC on various
flavour of *nix. You should use Erlang/OTP R10B-4, as this task
has became easier with this release. It comes already build in
Erlang/OTP Microsoft Windows binary.
PostgreSQL support is enabled by using the following module in
ejabberd.cfg instead of their standard counterpart:
mod_last_odbc.erl
mod_offline_odbc.erl
mod_roster_odbc.erl
The database schema is located in the src/odbc/pq.sql file.
Look at the src/ejabberd.cfg.example file for more information on
how to configure ejabberd with odbc support. You can get support
on how to configure ejabberd with a relational database.
Migration from ejabberd 0.7.5
Migration is pretty straightforward as Mnesia database schema
conversions is handled automatically. Remember however that you
must backup your ejabberd database before migration.
Here are the following steps to proceed:
1. Stop your instance of ejabberd.
2. In ejabberd.cfg, define the host lists. Change the host
directive to the hosts one:
Before:
{host, "erlang-projects.org"}.
After:
{hosts, ["erlang-projects.org", "erlang-fr.org"]}.
Note that when you restart the server the existing users will be
affected to the first virtual host, so the order is important. You
should keep the previous hostname as the first virtual host.
3. Restart ejabberd.
Bugfixes
This release contains several bugfixes and architectural changes.
Please refer to the Changelog file supplied with this release for
details of all improvements in the ejabberd code.
+120
View File
@@ -0,0 +1,120 @@
Release Notes
ejabberd 1.0.0
14 December 2005
This document describes the main changes in ejabberd 1.0.0. Unique in this
version is the compliancy with the XMPP (eXtensible Messaging and Presence
Protocol) standard. ejabberd is the first Open Source Jabber server claiming
to fully comply to the XMPP standard.
ejabberd can be downloaded from the Process-one website:
http://www.process-one.net/en/projects/ejabberd/
Detailed information can be found in the ejabberd Feature Sheet and User
Guide which are available on the Process-one website:
http://www.process-one.net/en/projects/ejabberd/docs.html
Recent changes include:
Server-to-server Encryption for Enhanced Security
- Support for STARTTLS and SASL EXTERNAL to secure server-to-server traffic
has been added.
- Also, STARTTLS and Dialback has been implemented for server-to-server (s2s)
connections. Detailed information about these new features can be found on
http://ejabberd.jabber.ru/s2s-encryption
- commonName and dNSName fields matching were introduced to ease the process
of retrieving certificates.
- Different certificates can be defined for each virtual host.
ODBC Support
- ODBC support has been improved to allow production use of ejabberd with
relational databases.
- Support for vCard storage in ODBC has been added.
- ejd2odbc.erl is a tool to convert an installation from Erlang's database
Mnesia to an ODBC compatible relational database.
Native PostgreSQL Support
- Native PostgreSQL support gives you a better performance when you use
PostgreSQL.
Shared Roster groups
- Shared Roster groups support has been enhanced. New is the ability to add
all registered users to everyone's roster. Detailed information about this
new feature can be found on http://ejabberd.jabber.ru/shared-roster-all
Web Interface
- The web interface internal code has been modified for better integration
and compliancy with J-EAI, an ejabberd-based Enterprise Application
Integration platform.
- More XHTML 1.0 Transitional compliancy work was done.
Transports
- A transport workaround can be enabled during compilation. To do this, you
can pass the "--enable-roster-gateway-workaround" option to the configure
script. (./configure --enable-roster-gateway-workaround)
This option allows transports to add items with subscription "to" in the
roster by sending <presence type='subscribed'/> stanza to user. This option
is only needed for JIT ICQ transport.
Warning: by enabling this option, ejabberd will not be fully XMPP compliant
anymore.
Documentation and Internationalization
- Documentation has been extended to cover more topics.
- Translations have been updated.
Bugfixes
- This release contains several bugfixes.
- Among other bugfixes include improvements to the client-to-server (c2s)
connection management module.
- Please refer to the ChangeLog file supplied
with this release regarding all improvements in ejabberd.
Installation Notes
Supported Erlang Version
- You need at least Erlang/OTP R9C to run ejabberd 1.0.0.
Installation
Installers are provided for Microsoft Windows and Linux/x86.
Installers can be retrieved from:
http://www.process-one.net/en/projects/ejabberd/download.html
Migration Notes
- Before any migration, ejabberd system and database must be properly
backed up.
- When upgrading an ODBC-based installation, you will need to change the
relational database schema. The following SQL commands must be run on the
database:
CREATE SEQUENCE spool_seq_seq;
ALTER TABLE spool ADD COLUMN seq integer;
ALTER TABLE spool ALTER COLUMN seq SET DEFAULT nextval('spool_seq_seq');
UPDATE spool SET seq = DEFAULT;
ALTER TABLE spool ALTER COLUMN seq SET NOT NULL;
References
Contributed tutorials of interest are:
- Migration from Jabberd1.4 to ejabberd:
http://ejabberd.jabber.ru/jabberd1-to-ejabberd
- Migration from Jabberd2 to ejabberd:
http://ejabberd.jabber.ru/jabberd2-to-ejabberd
- Transport configuration for connecting to other networks:
http://ejabberd.jabber.ru/tutorials-transports
END
+115
View File
@@ -0,0 +1,115 @@
Release Notes
ejabberd 1.1.0
24 April 2006
This document describes the main changes in ejabberd 1.1.0. This version
introduce new features including support for new Jabber Enhancement
Proposals and several performance improvements enabling deployments on an
even larger scale than already possible.
ejabberd can be downloaded from the Process-one website:
http://www.process-one.net/en/projects/ejabberd/
Detailed information can be found in the ejabberd Feature Sheet and User
Guide which are available on the Process-one website:
http://www.process-one.net/en/projects/ejabberd/docs.html
A complete list of changes is available from:
http://support.process-one.net/secure/ReleaseNote.jspa?projectId=10011&styleName=Html&version=10025
Recent changes include:
New Jabber Enhancement Proposal support:
- JEP-0050: Ad-Hoc Commands.
- JEP-0138: Stream Compression.
- JEP-0175: SASL anonymous.
Anonymous login
- SASL anonymous.
- Anonymous login for clients that do not yet support SASL Anonymous.
Relational database Support
- MySQL is now fully supported through ODBC and in native mode.
- Various improvements to the native database interfaces.
- The migration tool can use relational databases.
Multi-User Chat improvements
- Logging of room discussion to text file is now supported.
- Better reconfiguration support.
- Security oriented fixes.
- Several improvements and updates to latest JEP-0045.
Performance scalability improvements for large clusters
- Improved session synchronisation management between cluster nodes.
- Internal architecture has been reworked to use generalize Erlang/OTP
framework usage.
- Speed improvement on logger.
- TCP/IP packet reception change for better network throttling and
regulation.
As a result, these improvements will reduce load on large scale deployments.
XMPP Protocol related improvements
- XML stanza size can be limited.
- Messages are send to all resources with the same highest priority.
Documentation and Internationalization
- Documentation has been extended to cover more topics.
- Translations have been updated.
Web interface
- XHTML 1.0 compliance.
Bugfixes
- This release contains many bugfixes on various areas such as Publish-Subscribe, build
chain, installers, IRC gateway, ejabberdctl, amongst others.
- Please refer to the ChangeLog file supplied with this release regarding
all improvements in ejabberd.
Installation Notes
Supported Erlang Version
- You need at least Erlang/OTP R9C-2 to run ejabberd 1.1.0.
Installation
Installers are provided for Microsoft Windows, Linux/x86 and MacOSX/PPC.
Installers can be retrieved from:
http://www.process-one.net/en/projects/ejabberd/download.html
Migration Notes
- Before any migration, ejabberd system and database must be properly
backed up.
- The database schema has not been changed comparing to version 1.0.0 and
consequently it does not require any migration.
References
Contributed tutorials and documents of interest are:
- Migration from Jabberd1.4, Jabberd2 and WPJabber to ejabberd:
http://ejabberd.jabber.ru/migrate-to-ejabberd
- Transport configuration for connecting to other networks:
http://ejabberd.jabber.ru/tutorials-transports
- Using ejabberd with MySQL native driver:
http://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver
- Anonymous User Support:
http://support.process-one.net/doc/display/MESSENGER/Anonymous+users+support
- Frequently Asked Questions:
http://ejabberd.jabber.ru/faq
END
+119
View File
@@ -0,0 +1,119 @@
Release Notes
ejabberd 1.1.1
28 April 2006
This document describes the main changes in ejabberd 1.1.x. This version
introduce new features including support for new Jabber Enhancement
Proposals and several performance improvements enabling deployments on an
even larger scale than already possible.
This release fix a security issue introduced in ejabberd 1.1.0. In SASL
mode, anonymous login was enabled as a default. Upgrading ejabberd 1.1.0 to
ejabberd 1.1.1 is highly recommended.
ejabberd can be downloaded from the Process-one website:
http://www.process-one.net/en/projects/ejabberd/
Detailed information can be found in the ejabberd Feature Sheet and User
Guide which are available on the Process-one website:
http://www.process-one.net/en/projects/ejabberd/docs.html
A complete list of changes is available from:
http://support.process-one.net/secure/ReleaseNote.jspa?projectId=10011&styleName=Html&version=10025
Recent changes include:
New Jabber Enhancement Proposal support:
- JEP-0050: Ad-Hoc Commands.
- JEP-0138: Stream Compression.
- JEP-0175: SASL anonymous.
Anonymous login
- SASL anonymous.
- Anonymous login for clients that do not yet support SASL Anonymous.
Relational database Support
- MySQL is now fully supported through ODBC and in native mode.
- Various improvements to the native database interfaces.
- The migration tool can use relational databases.
Multi-User Chat improvements
- Logging of room discussion to text file is now supported.
- Better reconfiguration support.
- Security oriented fixes.
- Several improvements and updates to latest JEP-0045.
Performance scalability improvements for large clusters
- Improved session synchronisation management between cluster nodes.
- Internal architecture has been reworked to use generalize Erlang/OTP
framework usage.
- Speed improvement on logger.
- TCP/IP packet reception change for better network throttling and
regulation.
As a result, these improvements will reduce load on large scale deployments.
XMPP Protocol related improvements
- XML stanza size can be limited.
- Messages are send to all resources with the same highest priority.
Documentation and Internationalization
- Documentation has been extended to cover more topics.
- Translations have been updated.
Web interface
- XHTML 1.0 compliance.
Bugfixes
- This release contains many bugfixes on various areas such as Publish-Subscribe, build
chain, installers, IRC gateway, ejabberdctl, amongst others.
- Please refer to the ChangeLog file supplied with this release regarding
all improvements in ejabberd.
Installation Notes
Supported Erlang Version
- You need at least Erlang/OTP R9C-2 to run ejabberd 1.1.0.
Installation
Installers are provided for Microsoft Windows, Linux/x86 and MacOSX/PPC.
Installers can be retrieved from:
http://www.process-one.net/en/projects/ejabberd/download.html
Migration Notes
- Before any migration, ejabberd system and database must be properly
backed up.
- The database schema has not been changed comparing to version 1.0.0 and
consequently it does not require any migration.
References
Contributed tutorials and documents of interest are:
- Migration from Jabberd1.4, Jabberd2 and WPJabber to ejabberd:
http://ejabberd.jabber.ru/migrate-to-ejabberd
- Transport configuration for connecting to other networks:
http://ejabberd.jabber.ru/tutorials-transports
- Using ejabberd with MySQL native driver:
http://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver
- Anonymous User Support:
http://support.process-one.net/doc/display/MESSENGER/Anonymous+users+support
- Frequently Asked Questions:
http://ejabberd.jabber.ru/faq
END
+119
View File
@@ -0,0 +1,119 @@
Release Notes
ejabberd 1.1.2
27 September 2006
This document describes the main changes in ejabberd 1.1.2.
This version is a major improvement over ejabberd 1.1.1, improving the
overall behaviour of the server in many areas. Users of ejabberd 1.1.1
should upgrade to this new release for improved robustness and compliance.
ejabberd can be downloaded from the Process-one website:
http://www.process-one.net/en/projects/ejabberd/
Detailed information can be found in the Feature Sheet and in the
Installation and Operation Guide which are both available on the
Process-one website:
http://www.process-one.net/en/projects/ejabberd/docs.html
ejabberd includes 44 improvements. A complete list of changes can be
retrieved from:
http://redir.process-one.net/ejabberd-1.1.2
Recent changes include:
LDAP Improvements
- Major improvements have been made on the LDAP module. It is now more
flexible and more robust.
HTTP Polling Fixes
- The HTTP polling modules have been fixed and improved: the connections are
closed properly and polled messages cannot be lost anymore.
Roster Management Improvement
- Roster management improvements increase reliability, especially in cases
where users are on different servers.
- Shared rosters are more reliable.
Improved Robustness
- It is now possible to limit the number of opened connections for a single
user.
Relational databases
- Database support: Microsoft SQL Server is now officially supported in ODBC
mode.
Publish-Subscribe Improvement
- Restricting node creation with a dedicated ACL rule is now possible.
Localization
- A Czech translation has been added.
- Translations have been updated.
Binary Installer
- New binary installer for Windows including all requirements.
- Improved installers for Linux and MacOSX (PowerPC)
XMPP Compliancy
- Some protocol compliance fix have been added, after the Portland XMPP
Interop Meeting in July.
Miscelanous
- MUC have been improved (logging rendering).
- The command line tool ejabberdctl has been improved.
- The build chain has been improved, including MacOSX support.
- The documentation has been improved and updated to describe the new
features.
Bugfixes
- Anonymous login bugfixes.
- Please refer to the ChangeLog file supplied with this release regarding
all improvements in ejabberd.
Installation Notes
Supported Erlang Version
- You need at least Erlang/OTP R9C-2 to run ejabberd 1.1.2.
- The recommanded version is Erlang/OTP R10B-10.
- Erlang/OTP R11B has not yet been fully certified for ejabberd.
Installation
Installers are provided for Microsoft Windows, Linux/x86 and MacOSX/PPC.
They can be retrieved from:
http://www.process-one.net/en/projects/ejabberd/download.html
Migration Notes
- Before any migration, ejabberd system and database must be properly
backed up.
- The relational database schema has changed between version 1.1.1 and
1.1.2. An "askmessage" column needs to be added in the "rosterusers" table
to perform the migration.
References
Contributed tutorials and documents of interest are:
- Migration from other XMPP servers to ejabberd:
http://ejabberd.jabber.ru/migrate-to-ejabberd
- Transport configuration for connecting to other networks:
http://ejabberd.jabber.ru/tutorials-transports
- Frequently Asked Questions:
http://ejabberd.jabber.ru/faq
END
+14
View File
@@ -0,0 +1,14 @@
Release Notes
ejabberd 1.1.3
2 February 2007
ejabberd 1.1.3 is a security fix release for ejabberd roster ODBC
module.
The upgrade is only necessary if you are using ejabberd with the
mod_roster_odbc.
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/projects/ejabberd/
END
+31
View File
@@ -0,0 +1,31 @@
Release Notes
ejabberd 1.1.4
3 september 2007
ejabberd 1.1.4 is a bugfix release for ejabberd 1.1.x branch.
ejabberd 1.1.4 includes 10 improvements. A complete list of changes
can be retrieved from:
http://redir.process-one.net/ejabberd-1.1.4
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/projects/ejabberd/
Recent changes include:
- Better LDAP support.
- Support for UTF-8 with MySQL 5.
- Roster migration script bugfixes.
- Performance improvements on user removal.
- Traffic shapers bugfix.
- Configuration: host value is now case insensitive.
- Build: ejabberd.cfg file is not overwritten with 'make install' command.
Bugs report
You can officially report bugs on Process-one support site:
http://support.process-one.net/
END
+208
View File
@@ -0,0 +1,208 @@
Release Notes
ejabberd 2.0.0
21 February 2008
ejabberd 2.0.0 is a major new version for ejabberd adding plenty of
new features, performance and scalability improvements and
architectural changes.
ejabberd 2.0.0 includes more than 200 improvements over ejabberd
1.1.x. A complete list of changes can be retrieved from:
http://redir.process-one.net/ejabberd-2.0.0
The new code can be downloaded from ejabberd downloads page:
http://www.process-one.net/en/ejabberd/
Recent changes include:
* Clustering and Architecture
- New front-end and back-end cluster architecture for better
scalability and robustness. Back-end nodes are able to run a fully
fault-tolerant XMPP router and services, but you can now deploy
many front-end nodes to share the load without needing to synchronize
any state with the back-ends.
- All components now run in cluster mode (For example, Multi-User chat
service and file transfer proxy).
- New load balancing algorithm to support Multi-User chat and gateways
clustering. More generally it supports any external component load
balancing.
- ejabberd watchdog to receive warning on suspicious resources consumption.
- Traffic shapers are now supported on components. This protect
ejabberd from components and gateways abuses.
* Publish and Subscribe
- Complete rewrite of the PubSub module. The new PubSub module is
plugin-based, allowing developers to create new nodes type. Any
application can be plugged to ejabberd and can provide rich presence
as a pubsub plugin.
- Personal Eventing via Pubsub support (XEP-0163). This module is
implemented as a PubSub service. It supports user mood (XEP-107),
User Tune (XEP-118), user location (XEP-0080) or user avatar
(XEP-0084) for example.
* Server to Server (s2s)
- More robust code with connection timeout implementation.
- Support for multiple s2s connections per domain.
- s2s whitelist and blacklist support.
- s2s retrial interval.
* LDAP
- Many enterprise-class enhancements such as better behaviour under
heavy load.
- Support for LDAP servers pool.
- Simplified use of virtual hosting with LDAP with domain substitution
in config.
- Ability to match on several userid attributes.
* Multi-User Chat
- Clustering and load balancing support.
- Ability to define default room configuration in ejabberd config file.
- Many anti abuse features have been added:
. New ACL to limit the creation of persistent room to authorized users.
. Ability to define the maximum number of users per room.
. Limitation of the rate of message and presence packets.
. Limitation of the maximum number of room a user can join at the same time.
* File Transfer
- XEP-0065 - Proxy65 file transfer proxy. The proxy can run in
cluster mode.
* Authentication
- PAM (Pluggable Authentication Modules) support on *nix systems.
- External Authentication protocol is now fully documented.
* Web Client Support
- XEP-0124 - BOSH support: BOSH (Bidirectional-streams Over
Synchronous HTTP) was formerly known as "HTTP binding". It provides
an efficient alternative to HTTP polling for scalable Web based chat
solutions.
- HTTP module can now serve static documents (with
mod_http_fileserver). It is needed for high-performance Web 2.0 chat
/ IM application. System administrators can now avoid using a proxy
(like Apache) that handles much less simultaneous than ejabberd HTTP
module.
- Added limitations enforcement on HTTP poll and HTTP bind modules
(bandwidth, packet size).
* System Administration
- XEP-0133 - Service administration support. System administrators can
now perform lot of ejabberd related admin tasks from their XMPP
client, through adhoc commands.
- Dynamic log levels: Improved logging with more log levels. You can
now change the loglevel at run time. No performance penalty is
involved when less verbose levels are used.
- The ejabberdctl command-line administration script now can start
and stop ejabberd. It also includes other useful options.
* Localization
- ejabberd is now translated to 24 languages: Catalan, Chinese, Czech,
Dutch, English, Esperanto, French, Galician, German, Italian, Japanese,
Norwegian, Polish, Portuguese, Portuguese (Brazil), Russian, Slovak,
Spanish, Swedish, Thai, Turkish, Ukrainian, Vietnamese, Walloon.
* Build and Installer
- Many launch script improvements.
- New translations. The binary installer is now available in Chinese,
Dutch, English, French, German, Spanish, Russian.
- Makefile now implements uninstall command.
- Full MacOSX compliance in Makefile.
- Configure script is clever at finding libraries in unusual places.
* Development API
- Several hooks have been added for module developers (most notably
presence related hooks).
- HTTP request handler to write HTTP based plugins.
- Manage connections IP address.
* Bugfixes
- ejabberd 2.0.0 also fixes numerous small bugs :) Read the full
changelog for details.
Important Note:
- Since this release, ejabberd requires Erlang R10B-5 or higher.
R11B-5 is the recommended version. R12 is not yet officially
supported, and is not recommended for production servers.
Upgrading From ejabberd 1.x:
- If you upgrade from a version older than 1.1.4, please check the
Release Notes of the intermediate versions for additional
information about database or configuration changes.
- The database schemas didn't change since ejabberd 1.1.4. Of course,
you are encouraged to make a database backup of your SQL database,
or your Mnesia spool directory before upgrading ejabberd.
- The ejabberdctl command line administration script is improved in
ejabberd 2.0.0, and now it can start and stop ejabberd. If you
already wrote your own start script for ejabberd 1.x, you can
continue using it, or try ejabberdctl. For your convenience, the
ejabberd Guide describes all the ejabberd and Erlang options used by
ejabberdctl.
- The example ejabberd.cfg file has been reorganized, but its format
and syntax rules are the same. So, you can continue using your
ejabberd.cfg file from 1.x if you want. The most important changes
are described now.
- The 'ssl' option is no longer available in the listening ports. For
legacy SSL encryption use the option 'tls'. For STARTTLS encryption
as defined in RFC 3920 XMPP-CORE use the option 'starttls'. Check
the ejabberd Guide for more information about configuring listening
ports.
- The options 'welcome_message' and 'registration_watchers' are now
options of the module mod_register. Check in the ejabberd Guide how
to configure that module.
- To enable PEP support in mod_pubsub, you need to enable it in the
mod_pubsub configuration, and also enable the new module
mod_caps. Check the section about mod_pubsub in the ejabberd Guide.
- Other new features and improvements also require changes in the
ejabberd.cfg, like mod_http_bind, mod_http_fileserver, mod_proxy65,
loglevel, pam_service, and watchdog_admins. Search for those words
in the ejabberd Guide and the example ejabberd.cfg.
Bug Reports
You can officially report bugs on Process-one support site:
https://support.process-one.net/
END
+30
View File
@@ -0,0 +1,30 @@
Release Notes
ejabberd 2.0.1
20 May 2008
ejabberd 2.0.1 is a bugfix release for ejabberd 2.0.x branch.
ejabberd 2.0.1 includes 10 improvements and 32 bugfixes.
A complete list of changes can be retrieved from:
http://redir.process-one.net/ejabberd-2.0.1
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/projects/ejabberd/
Recent changes include:
- Erlang R12 support.
- Better LDAP handling.
- PubSub bugfixes.
- Documentation improvements.
- inband registration limitation per IP.
- s2s improvements.
Bugs report
You can officially report bugs on Process-one support site:
http://support.process-one.net/
END
+34
View File
@@ -0,0 +1,34 @@
Release Notes
ejabberd 2.0.2
28 August 2008
ejabberd 2.0.2 is the second bug fix release for ejabberd 2.0.x branch.
ejabberd 2.0.2 includes many bugfixes and a few improvements.
A complete list of changes can be retrieved from:
http://redir.process-one.net/ejabberd-2.0.2
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
Recent changes include:
- Anti-abuse feature: client blacklist support by IP.
- Guide: new section Securing ejabberd; improved usability.
- LDAP filter optimisation: ability to filter user in ejabberd and not LDAP.
- MUC improvements: room options to restrict visitors; broadcast reasons.
- Privacy rules: fix MySQL storage.
- Pub/Sub and PEP: many improvements in implementation and protocol compliance.
- Proxy65: send valid SOCKS5 reply (removed support for Psi < 0.10).
- Web server embedded: better support for HTTPS.
- Binary installers: SMP on Windows; don't remove config when uninstalling.
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
END
+35
View File
@@ -0,0 +1,35 @@
Release Notes
ejabberd 2.0.3
14 January 2009
ejabberd 2.0.3 is the third bugfix release for ejabberd 2.0.x branch.
ejabberd 2.0.3 includes several bugfixes and a few improvements.
A complete list of changes can be retrieved from:
http://redir.process-one.net/ejabberd-2.0.3
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
Recent changes include:
- Do not ask certificate for client (c2s)
- Check digest-uri in SASL digest authentication
- Use send timeout to avoid locking on gen_tcp:send
- Fix ejabberd reconnection to database
- HTTP-Bind: handle wrong order of packets
- MUC: Improve traffic regulation management
- PubSub: Several bugfixes and improvements for best coverage of XEP-0060 v1.12
- Shared Roster Groups: push immediately membership changes
- Rotate also sasl.log on "reopen-log" command
- Binary Windows installer: better detect "Error running Post Install Script"
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
END
+44
View File
@@ -0,0 +1,44 @@
Release Notes
ejabberd 2.0.4
ejabberd 2.0.4 is the fourth bugfix release for ejabberd 2.0.x branch.
ejabberd 2.0.4 includes several bugfixes.
A detailed list of changes can be retrieved from:
http://redir.process-one.net/ejabberd-2.0.4
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
The changes are:
- Ensure ID attribute in roster push is unique
- Authentication: Fix Anonymous auth when enabled with broken ODBC
- Authentication: Unquote correctly backslash in DIGEST-MD5 SASL responses
- Authentication: Cancel presence subscriptions on account deletion
- LDAP: Close a connection on tcp_error
- LDAP: Implemented queue for pending queries
- LDAP: On failure of LDAP connection, waiting is done on pending queue
- MUC: Owner of a password protected room must also provide the password
- MUC: Prevent XSS in MUC logs by linkifying only a few known protocols
- Privacy rules: Items are now processed in the specified order
- Privacy rules: Fix to correctly block subscription requests
- Proxy65: If ip option is not defined, take an IP address of a local hostname
- PubSub: Add roster subscription handling; send PEP events to all resources
- PubSub: Allow node creation without configure item
- PubSub: Requesting items on a node which exists, but empty returns an error
- PEP: Fix sending notifications to other domains and s2s
- S2S: Fix problem with encrypted connection to Gtalk and recent Openfire
- S2S: Workaround to get DNS SRV lookup to work on Windows machine
- Shared Roster Groups: Fix to not resend authorization request
- WebAdmin: Fix encryption problem for ejabberd_http after timeout
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
END
+33
View File
@@ -0,0 +1,33 @@
Release Notes
ejabberd 2.0.5
ejabberd 2.0.5 is the fifth bugfix release in ejabberd 2.0.x branch.
ejabberd 2.0.5 includes three bugfixes.
More details of those fixes can be retrieved from:
http://redir.process-one.net/ejabberd-2.0.5
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
The changes are:
- Fix two problems introduced in ejabberd 2.0.4: subscription request
produced many authorization requests with some clients and
transports; and subscription requests were not stored for later
delivery when receiver was offline.
- Fix warning in expat_erl.c about implicit declaration of x_fix_buff
- HTTP-Bind (BOSH): Fix a missing stream:error in the returned
remote-stream-error stanza
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
END
+281
View File
@@ -0,0 +1,281 @@
Release Notes
ejabberd 2.1.0
ejabberd 2.1.0 is a major new version for ejabberd adding many
new features, performance and scalability improvements.
ejabberd 2.1.0 includes many new features, improvements and bug fixes.
A complete list of changes can be retrieved from:
http://redir.process-one.net/ejabberd-2.1.0
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
New features and improvements:
* Anti-abuse
- Captcha support (XEP-0158). The example script uses ImageMagick.
- New option: registration_timeout to limit registrations by time
- Use send timeout to avoid locking on gen_tcp:send
- mod_ip_blacklist: client blacklist support by IP
* API
- ejabberd_http provides Host, Port, Headers and Protocol in HTTP requests
- Export function to create MUC room
- New events: s2s_send_packet and s2s_receive_packet
- New event: webadmin_user_parse_query when POST in web admin user page
- Support distributed hooks over the cluster
* Authentification
- Extauth responses: log strange responses and add timeout
* Binary Installer
- Includes exmpp library to support import/export XML files
* Caps
- Remove useless caps tables entries
- mod_caps must handle correctly external contacts with several resources
- Complain if mod_caps disabled and mod_pubsub has PEP plugin enabled
* Clustering and Architecture
* Configuration
- Added option access_max_user_messages for mod_offline
- Added option backlog for ejabberd_listener to increase TCP backlog
- Added option define_macro and use_macro
- Added option include_config_file to include additional configuration files
- Added option max_fsm_queue
- Added option outgoing_s2s_options to define IP address families and timeout
- Added option registration_timeout to ejabberd.cfg.example
- Added option s2s_dns_options to define DNS timeout and retries
- Added option ERL_OPTIONS to ejabberdctl.cfg
- Added option FIREWALL_WINDOW to ejabberdctl.cfg
- Added option EJABBERD_PID_PATH to ejabberdctl.cfg
- Deleted option user_max_messages of mod_offline
- Check certfiles are readable on server start and listener start
- Config file management mix file reading and sanity check
- Include example PAM configuration file: ejabberd.pam
- New ejabberd listener: ejabberd_stun
- Support to bind the same port to multiple interfaces
- New syntax to specify the IP address and IPv6 in listeners
configuration. The old options {ip,{1,2,3,4}} and inet6 are
supported even if they aren't documented.
- New syntax to specify the network protocol: tcp or udp
- Report error at startup if a listener module isn't available
- Only listen in a port when actually ready to serve requests
- In default config, only local accounts can create rooms and PubSub nodes
* Core architecture
- More verbose error reporting for xml:element_to_string
- Deliver messages when first presence is Invisible
- Better log message when config file is not found
- Include original timestamp on delayed presences
* Crypto
- Do not ask certificate for client (c2s)
- SSL code remove from ejabberd in favor of TLS
- Support Zlib compression after STARTTLS encryption
- tls v1 client hello
* Documentation
- Document possible default MUC room options
- Document service_check_from in the Guide
- Document s2s_default_policy and s2s_host in the Guide
- new command and guide instructions to change node name in a Mnesia database
* ejabberd commands
- ejabberd commands: separate command definition and calling interface
- access_commands restricts who can execute what commands and arguments
- ejabberdctl script now displays help and categorization of commands
* HTTP Binding and HTTP Polling
- HTTP-Bind: module optimization and clean-up
- HTTP-Bind: allow configuration of max_inactivity timeout
- HTTP-Poll: turn session timeout into a config file parameter
* Jingle
- STUN server that facilitates the client-to-client negotiation process
* LDAP
- Faster reconnection to LDAP servers
- LDAP filter optimisation: Add ability to filter user in ejabberd and not LDAP
- LDAP differentiates failed auth and unavailable auth service
- Improve LDAP logging
- LDAPS support using TLS.
* Localization
- Use Gettext PO for translators, export to ejabberd MSG
- Support translation files for additional projects
- Most translations are updated to latest code
- New translation to Greek language
* Multi-User Chat (MUC)
- Allow admins to send messages to rooms
- Allow to store room description
- Captcha support in MUC: the admin of a room can configure it to
require participants to fill a captcha to join the room.
- Limit number of characters in Room ID, Name and Description
- Prevent unvoiced occupants from changing nick
- Support Result Set Management (XEP-0059) for listing rooms
- Support for decline of invitation to MUC room
- mod_muc_log options: plaintext format; filename with only room name
* Performance
- Run roster_get_jid_info only if privacy list has subscription or group item
- Significant PubSub performance improvements
* Publish-Subscribe
- Add nodetree filtering/authorization
- Add subscription option support for collection nodes
- Allow Multiple Subscriptions
- Check option of the nodetree instead of checking configuration
- Implement whitelist authorize and roster access model
- Implicit item deletion is not notified when deleting node
- Make PubSub x-data configuration form handles list value
- Make default node name convention XEP-compatible, document usage of hierarchy
- Node names are used verbatim, without separating by slash, unless a
node plugin uses its own separator
- Send authorization update event (XEP-0060, 8.6)
- Support of collection node subscription options
- Support ODBC storage. Experimental, needs more testing.
* Relational databases:
- Added MSSQL 2000 and 2005
- Privacy rules storage in MySQL
- Implement reliable ODBC transaction nesting
* Source Package
- Default installation directories changed. Please see the upgrade notes below.
- Allow more environment variable overrides in ejabberdctl
- ChangeLog is not edited manually anymore; it's generated automatically.
- Install the ejabberd Guide
- Install the ejabberd include files
- New option for the 'configure' script: --enable-user which installs
ejabberd granting permission to manage it to a regular system user;
no need to use root account to.
- Only try to install epam if pam was enabled in configure script
- Spool, config and log dirs: owner writes, group reads, others do nothing.
- Provides an example ejabberd.init file
* S2S
- Option to define s2s outgoing behaviour: IPv4, IPv6 and timeout
- DNS timeout and retries, configurable with s2s_dns_options.
* Shared rosters
- When a member is added/removed to group, send roster upgrade to group members
* Users management
- When account is deleted, cancel presence subscription for all roster items
* XEP Support
- Added XEP-0059 Result Set Management (for listing rooms)
- Added XEP-0082 Date Time
- Added XEP-0085 Chat State Notifications
- Added XEP-0157 Contact Addresses for XMPP Services
- Added XEP-0158 CAPTCHA Forms (in MUC rooms)
- Added STUN server, for XEP-0176: Jingle ICE-UDP Transport Method
- Added XEP-0199 XMPP Ping
- Added XEP-0202 Entity Time
- Added XEP-0203 Delayed Delivery
- Added XEP-0227 Portable Import/Export Format for XMPP-IM Servers
- Added XEP-0237 Roster Versioning
* Web Admin
- Display the connection method of user sessions
- Cross link of ejabberd users in the list of users and rosters
- Improved the browsing menu: don't disappear when browsing a host or node
- Include Last-Modified HTTP header in responses to allow caching
- Make some Input areas multiline: options of listening ports and modules
- Support PUT and DELETE methods in ejabberd_http
- WebAdmin serves Guide and links to related sections
* Web plugins
- mod_http_fileserver: new option directory_indices, and improve logging
Important Notes:
- ejabberd 2.1.0 requires Erlang R10B-9 or higher.
R12B-5 is the recommended version. Support for R13B is experimental.
Upgrading From ejabberd 1.x.x:
- Check the Release Notes of the intermediate versions for additional
information about database or configuration changes.
Upgrading From ejabberd 2.0.x:
- The database schemas have three changes since ejabberd 2.0.x.
Check the database creation SQL files and update your database.
1) New table roster_version to support roster versioning.
2) Six new tables for optional pubsub ODBC storage.
3) Some tables in the MySQL database have a new created_at column.
- As usual, it is recommended to backup the Mnesia spool directory and
your SQL database (if used) before upgrading ejabberd.
- Between ejabberd 2.0.0 and 2.0.5, mod_pubsub used "default" as the
default node plugin. But in 2.1.0 this is renamed to "hometree".
You have to edit your ejabberd config file and replace those names.
If you used ejabberd 2.0.5 or older, the database will be updated
automatically. But if you were using ejabberd from SVN, you must
manually run ejabberdctl with the command: rename_default_nodeplugin.
Running this command on already updated database does nothing.
- The listener options 'ip' and 'inet6' are not documented anymore
but they are supported and you can continue using them.
There is a new syntax to define IP address and IP version.
As usual, check the ejabberd Guide for more information.
- The log file sasl.log is now called erlang.log
- ejabberdctl commands now have _ characters instead of -.
For backwards compatibility, it is still supported -.
- mod_offline has a new option: access_max_user_messages.
The old option user_max_messages is no longer supported.
- If you upgrade from ejabberd trunk SVN, you must execute this:
$ ejabberdctl rename_default_nodeplugin
- Default installation directories changed a bit:
* The Mnesia spool files that were previously stored in
/var/lib/ejabberd/db/NODENAME/*
are now stored in
/var/lib/ejabberd/*
* The directories
/var/lib/ejabberd/ebin
/var/lib/ejabberd/priv
and their content is now installed as
/lib/ejabberd/ebin
/lib/ejabberd/priv
* There is a new directory with Erlang header files:
/lib/ejabberd/include
* There is a new directory for ejabberd documentation,
which includes the Admin Guide and the release notes::
/share/doc/ejabberd
- How to upgrade from previous version to ejabberd 2.1.0:
1. Stop the old instance of ejabberd.
2. Run 'make install' of new ejabberd 2.1.0 to create the new directories.
3. Copy the content of your old directory:
/var/lib/ejabberd/db/NODENAME/
to the new location:
/var/lib/ejabberd/
so you will have the files like this:
/var/lib/ejabberd/acl.DCD ...
4. You can backup the content of those directories and delete them:
/var/lib/ejabberd/ebin
/var/lib/ejabberd/priv
/var/lib/ejabberd/db
5. Now try to start your new ejabberd 2.1.0.
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+47
View File
@@ -0,0 +1,47 @@
Release Notes
ejabberd 2.1.1
ejabberd 2.1.1 is the first bugfix release in ejabberd 2.1.x branch.
ejabberd 2.1.1 includes several important bugfixes.
More details of those fixes can be retrieved from:
http://redir.process-one.net/ejabberd-2.1.1
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
The changes are:
* Core
- Call ejabberd_router:route/3 instead of sending a message
- Can't connect if starttls_required and zlib are set
- Routes vCard request to the occupant full JID, but should to bare JID
- S2S: fix allow_host/2 on subdomains. added hook s2s_allow_host
* MUC
- Support converting one-to-one chat to MUC
- Add support for serving a Unique Room Name
* Publish Subscribe
- Receive same last published PEP items at reconnect if several resources online
- Typo in mod_pubsub_odbc breaks Service Discovery and more
* Web
- Fix memory and port leak when TLS is enabled in HTTP
- WebAdmin doesn't report correct last activity with postgresql backend
- Option to define custom HTTP headers in mod_http_fileserver
- Show informative webpage when browsing the HTTP-Poll page
* Other
- Change captcha.sh to not depend on bash
- Generate main XML file also when exporting only a vhost
- Fix last newline in ejabberdctl result
- Guide: fix -setcookie, mod_pubsub_odbc host, content_types
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+51
View File
@@ -0,0 +1,51 @@
Release Notes
ejabberd 2.1.2
ejabberd 2.1.2 is the second bugfix release in ejabberd 2.1.x branch.
ejabberd 2.1.2 includes several bugfixes.
More details of those fixes can be retrieved from:
http://redir.process-one.net/ejabberd-2.1.2
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
The major changes are:
* Core
- Close sessions that were half connected
- Fix SASL PLAIN authentication message for RFC4616 compliance
- Fix support for old Erlang/OTP R10 and R11
- Return proper error (not 'conflict') when register is forbidden by ACL
- When ejabberd stops, send stream close to clients
* ejabberdctl
- Check for EGID in ejabberdctl command
- Command to stop ejabberd informing users, with grace period
- If there's a problem in config file, display config lines and stop node
* MUC
- Kick occupants with reason when room is stopped due to MUC shutdown
- Write in room log when a room is created, destroyed, started, stopped
* PubSub and PEP
- Don't call gen_server on internal event (improves performance and scalability)
- Fix duplicate SHIM header in Pubsub message
- Notification messages of Pubsub node config change contained a SHIM header
- SubID SHIM header missing in Pubsub message with multiple
subscriptions on the same node
- PEP: last published item not sent from unavailable users when the
subscription is implicit (XEP-0115)
- pep_mapping not working due to Node type mismatch
* WebAdmin
- If big offline message queue, show only subset on WebAdmin
- Support in user list page of WebAdmin when mod_offline is disabled
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+91
View File
@@ -0,0 +1,91 @@
Release Notes
ejabberd 2.1.3
ejabberd 2.1.3 is the third release in ejabberd 2.1.x branch.
ejabberd 2.1.3 includes many bugfixes, and some improvements.
More details of those fixes can be retrieved from:
http://redir.process-one.net/ejabberd-2.1.3
The new code can be downloaded from ejabberd download page:
http://www.process-one.net/en/ejabberd/
This is the full list of changes:
* Client connections
- Avoid 'invalid' value in iq record
- Avoid resending stream:error stanzas on terminate (EJAB-1180)
- Close also legacy sessions that were half connected (EJAB-1165)
- iq_query_info/1 now returns 'invalid' if XMLNS is invalid
- New ejabberd_c2s option support: max_fsm_queue
- Rewrite mnesia counter functions to use dirty_update_counter (EJAB-1177)
- Run user_receive_packet also when sending offline messages (EJAB-1193)
- Use p1_fsm behaviour in c2s FSM (EJAB-1173)
* Clustering
- Fix cluster race condition in route read
- New command to set master Mnesia node
- Use mnesia:async_dirty when cleaning table from failed node
* Documentation
- Add quotes in documentation of some erl arguments (EJAB-1191)
- Add option access_from (EJAB-1187)
- Add option max_fsm_queue (EJAB-1185)
- Fix documentation installation, no need for executable permission (EJAB-1170)
- Fix typo in EJABBERD_BIN_PATH (EJAB-891)
- Fix typos in example config comments (EJAB-1192)
* ejabberdctl
- Support concurrent connections with bound connection names
- Add support for Jot in ctl and TTY in debug
- Support help command names with old - characters
- Fix to really use the variable ERL_PROCESSES
* Erlang compatibility
- Don't call queue:filter/2 to keep compatibility with older Erlang versions
- Use alternative of file:read_line/1 to not require R13B02
* HTTP
- Add new debugging hook to the http receiving process
- Allow a request_handler to serve a file in root of HTTP
* HTTP-Bind (BOSH)
- Cross-domain HTTP-Bind support (EJAB-1168)
- Hibernate http-bind process after handling a request
- Reduce verbosity of HTTP Binding log messages
* LDAP
- Document ldap_dn_filter, fetch only needed attributes in search (EJAB-1204)
- Use "%u" pattern as default for ldap_uids (EJAB-1203)
* Localization
- Fix German translation (EJAB-1195)
- Fix Russian translation
* ODBC
- Fix MSSQL support, which was broken (EJAB-1201)
- Improved SQL reconnect behaviour
* Pubsub, PEP and Caps
- Add extended stanza addressing 'replyto' on PEP (EJAB-1198)
- Add pubsub#purge_offline (EJAB-1186)
- Fix pubsub#title option (EJAB-1190)
- Fix remove_user for node subscriptions (EJAB-1172)
- Optimizations in mod_caps
* Other
- mod_register: Add new acl access_from, default is to deny
- mod_sic: new module for the experimental XEP-0279 Server IP Check (EJAB-1205)
- PIEFXIS: Catch errors when exporting to PIEFXIS file (EJAB-1178)
- Proxy65: new option "hostname" (EJAB-838)
- Roster: Fix resending authorization problem
- Shared Roster Groups: get contacts nickname from vcard (EJAB-114)
- S2S: Improved s2s connections clean up (EJAB-1202)
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+80
View File
@@ -0,0 +1,80 @@
Release Notes
ejabberd 2.1.4
ejabberd 2.1.4 is the fourth release in ejabberd 2.1.x branch,
and includes many small bugfixes and improvements.
Read more details about the changes in:
http://redir.process-one.net/ejabberd-2.1.4
Download the source code and installers from:
http://www.process-one.net/en/ejabberd/
This is the full list of changes:
* Authentication
- Extauth: Optionally cache extauth users in mnesia (EJAB-641)
- LDAP: Allow inband password change (EJAB-199)
- LDAP: Extensible match support (EJAB-722)
- LDAP: New option ldap_tls_verify is added (EJAB-1229)
- PAM: New option pam_userinfotype to provide username or JID (EJAB-652)
* HTTP
- Add xml default content type
- Don't show HTTP request in logs, because reveals password (EJAB-1231)
- Move HTTP session timeout log from warning level to info
- New Access rule webadmin_view for read-only
* HTTP-Bind (BOSH)
- Change max inactivity from 30 to 120 seconds
- Export functions to facilitate prebinding methods
- Use dirty_delete when removing the session
- Remove an unneeded delay of 100 milliseconds
* Pubsub, PEP and Caps
- Enforce pubsub#presence_based_delivery (EJAB-1221)
- Enforce pubsub#show_values subscription option (EJAB-1096)
- Fix error code when unsubscribing from a non-existent node
- Fix to send node notifications (EJAB-1225)
- Full support for XEP-0115 v1.5 (EJAB-1223)(EJAB-1189)
- Make last_item_cache feature to be cluster aware
- Prevent orphaned pubsub node (EJAB-1233)
- Send created node notifications
* Other
- Bounce messages when closing c2s session
- Bugfixes when handling Service Discovery to contacts (EJAB-1207)
- Compilation of ejabberd_debug.erl is now optional
- Don't send error stanza as reply to error stanza (EJAB-930)
- Don't store blocked messages in offline queue
- Reduce verbosity of log when captcha_cmd is checked but not configured
- Use a standard method to get a random seed (EJAB-1229)
- Commands: new update_list and update to update modified modules (EJAB-1237)
- Localization: Updated most translations
- MUC: Refactor code to reduce calls to get_affiliation and get_role
- ODBC: Add created_at column also to PostgreSQL schema
- Vcard: Automatic vcard avatar addition in presence
Upgrading From previous ejabberd releases:
- If you use PostgreSQL, maybe you want to add the column created_at
to several tables. This is only a suggestion; ejabberd doesn't use
that column. Add it to your existing database executing those SQL
statements:
ALTER TABLE users ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();
ALTER TABLE rosterusers ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();
ALTER TABLE spool ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();
ALTER TABLE vcard ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();
ALTER TABLE privacy_list ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();
ALTER TABLE privacy_storage ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+70
View File
@@ -0,0 +1,70 @@
Release Notes
ejabberd 2.1.5
ejabberd 2.1.5 is the fifth release in ejabberd 2.1.x branch,
and includes several minor bugfixes and a few improvements.
Read more details about the changes in:
http://redir.process-one.net/ejabberd-2.1.5
Download the source code and installers from:
http://www.process-one.net/en/ejabberd/
This is the full list of changes:
* Authentication
- Extauth: Support parallel script running (EJAB-1280)
- mod_register: Return Registered element when account exists
* ejabberdctl
- Fix print of command result that contains ~
- Fix problem when FIREWALL_WINDOW options for erl kernel were used
- Fix typo in update_list command (EJAB-1237)
- Some systems delete the lock dir; in such case don't use flock at all
- The command Update now returns meaningful message and exit-status (EJAB-1237)
* HTTP-Bind (BOSH)
- Don't say v1.2 in the Bind HTTP page
- New optional BOSH connection attribute process-delay (EJAB-1257)
* MUC
- Document the mod_muc option captcha_protected
- Now admins are able to see private rooms in disco (EJAB-1269)
- Show some more room options in the log file
* ODBC
- Correct handling of SQL boolean types (EJAB-1275)
- Discard too old queued requests (the caller has already got a timeout)
- Fixes wrong SQL escaping when --enable-full-xml is set
- Use ets insead of asking supervisor in ejabberd_odbc_sup:get_pids/1
* Pubsub, PEP and Caps
- Enforce disco features results (EJAB-1033, EJAB-1228, EJAB-1238)
- Support all the hash functions required by Caps XEP-0115
* Requirements
- Fixed support for Erlang R12; which doesn't support: true andalso ok
- Support OTP R14A by using public_key library instead of old ssl (EJAB-953)
- Requirement of OpenSSL increased from 0.9.6 to 0.9.8
- OpenSSL is now required, not optional
* Other
- Don't ask for client certificate when using tls (EJAB-1267)
- Fix typo in --enable-transient_supervisors
- Fix privacy check when serving local Last (EJAB-1271)
- Inform client that SSL session caching is disabled
- New configure option: --enable-nif
- Use driver allocator in C files for reflecting memory in erlang:memory(system)
- Debug: New p1_prof compiled with: make debugtools=true
- Debug: Added functions to collect stats about queues, memory, reductions etc
- HTTP: Log error if request has ambiguous Host header (EJAB-1261)
- Logs: When logging s2s out connection attempt or success, log if TLS is used
- Shared Rosters: When account is deleted, delete also member of stored rosters
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+104
View File
@@ -0,0 +1,104 @@
******************************************************************************
* These are the preliminary release notes of ejabberd 3.0.0.
*
* The download page for preliminary releases is:
* http://download.process-one.net/ejabberd/
*
* WARNING!!! PRELIMINARY DATABASE SCHEMA !!!
* The database schema may change before ejabberd 3.0.0 is released,
* and no migration code will be developed for this preliminary schema.
* The only supported migrations are
* from any ejabberd 0.9.0 ... 2.1.5 to the final 3.0.0.
* Don't use this preliminary ejabberd release for a production server.
* You can test this release with a blank database or with a copy of your
* production database, but don't let your users connect to this copy
* because their changes may get lost when you upgrade to the final 3.0.0.
******************************************************************************
Release Notes
ejabberd 3.0.0
ejabberd 3.0.0 is the first release in the brand new 3.x.x branch,
and includes several minor bugfixes and a few improvements.
Read more details about the changes in:
http://redir.process-one.net/ejabberd-3.0.0
Download the source code and installers from:
http://www.process-one.net/en/ejabberd/
ejabberd 3.0.0 includes three major changes:
* exmpp is now extensively used in ejabberd for parsing stanzas, and many more.
* gen_storage (abbreviated GS) provides a database abstraction layer,
which supports storage in Mnesia and in ODBC databases.
Several ejabberd modules use GS, like mod_roster and ejabberd_auth_storage.
The schema of the tables stored by those modules have changed,
and ejabberd migrates automatically your mnesia and ODBC
tables from previous ejabberd releases.
* Massive Hosting (abbreviated MH) is preliminary implemented in ejabberd,
but it is still incomplete, untested and undocumented.
This is a more detailed list of changes since ejabberd 2.1.5:
* Requirements
- Erlang/OTP R12B-5 or higher is required
- exmpp 0.9.5 or higher is required, not optional
- ESASL library is optional, for SASL GSSAPI authentication
- Libexpat not required by ejabberd, it uses exmpp now (EJAB-1111)
- GNU Iconv not required, because mod_irc isn't included anymore (EJAB-954)
- Only database migration from ejabberd 0.9.0 up to 2.1.5 is supported
- ejabberd modules developed for previous releases need to be upgraded to exmpp
* Configuration
- New option clusterid
- New option that can't be used yet: static_modules
- ejabberd_auth_storage: new option auth_storage
- mod_muc_log: option spam_prevention is now link_nofollow (EJAB-1141)
- mod_roster: new access option (EJAB-72)
- S2S: allow definition of local address for outgoing connections (EJAB-418)
* Database
- New gen_storage that provides a database storage abstraction layer (EJAB-1102)
- mod_*_odbc are obsolete, use the normal ones with the option {backend, odbc}
- New ejabberd_auth_storage that supports internal and odbc databases
* XEP support
- Removed support for the deprecated XEP-0018 Invisible Presence (EJAB-810)
- mod_multicast: service for XEP-0033: Extended Stanza Addressing (EJAB-265)
- New ejabberd router for multicast packets (XEP-0033) (EJAB-329)
- ejabberd_c2s uses XEP-0033 if mod_multicast is enabled (EJAB-267)
- mod_muc uses XEP-0033 if mod_multicast is enabled (EJAB-266)
* Pubsub/PEP/Caps
- Allow distinguish between leafs and items (EJAB-1027)
- Enforce disco features results (EJAB-1033, EJAB-1228, EJAB-1238)
- Enforce pubsub#presence_based_delivery (EJAB-1221)
- Improve get_caps while still waiting for initial presence (EJAB-934)
- Make nodetree_tree implicitly create parent node if required (EJAB-944)
- Only use binary() instead of string() in Host and ServerHost (EJAB-1244)
- Rename NodeId (pubsub_node.id) bindings to Nidx (EJAB-1000)
- node_flat becomes default; it has the code instead of hometree (EJAB-1077)
- pubsub#notify_sub node option (EJAB-1230)
- pubsub#type node config and payload namespace (EJAB-1083)
* Miscellanea
- Bugfix handling Service Discovery to contacts (EJAB-1207)
- Bugfix: external contacts were offline after unavailable presence (EJAB-943)
- Don't offer SASL auth before doing TLS if TLS is required
- Experimental support for GSSAPI auth, requires esasl library (EJAB-831)
- Use binaries instead of lists where possible (EJAB-17)
- Windows ejabberdctl.cmd only handles up to 4 arguments (EJAB-1216)
- ejabberdctl: when starting, check it isn't already running
Bug reports
You can officially report bugs on ProcessOne support site:
http://support.process-one.net/
+2
View File
@@ -0,0 +1,2 @@
% ejabberd version (automatically generated).
\newcommand{\version}{3.0.0-alpha-x}
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

-17
View File
@@ -1,17 +0,0 @@
[Unit]
Description=XMPP Server
After=network.target
[Service]
User=ejabberd
Group=ejabberd
LimitNOFILE=16000
RestartSec=5
ExecStart=/bin/sh @ctlscriptpath@/ejabberdctl start
ExecStop=@ctlscriptpath@/ejabberdctl stop
ExecReload=@ctlscriptpath@/ejabberdctl reload_config
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
-686
View File
@@ -1,686 +0,0 @@
###
###' ejabberd configuration file
###
###
### The parameters used in this configuration file are explained in more detail
### in the ejabberd Installation and Operation Guide.
### Please consult the Guide in case of doubts, it is included with
### your copy of ejabberd, and is also available online at
### http://www.process-one.net/en/ejabberd/docs/
### The configuration file is written in YAML.
### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
### However, ejabberd treats different literals as different types:
###
### - unquoted or single-quoted strings. They are called "atoms".
### Example: dog, 'Jupiter', '3.14159', YELLOW
###
### - numeric literals. Example: 3, -45.0, .0
###
### - quoted or folded strings.
### Examples of quoted string: "Lizzard", "orange".
### Example of folded string:
### > Art thou not Romeo,
### and a Montague?
###. =======
###' LOGGING
##
## loglevel: Verbosity of log files generated by ejabberd.
## 0: No ejabberd log at all (not recommended)
## 1: Critical
## 2: Error
## 3: Warning
## 4: Info
## 5: Debug
##
loglevel: 4
##
## rotation: Describe how to rotate logs. Either size and/or date can trigger
## log rotation. Setting count to N keeps N rotated logs. Setting count to 0
## does not disable rotation, it instead rotates the file and keeps no previous
## versions around. Setting size to X rotate log when it reaches X bytes.
## To disable rotation set the size to 0 and the date to ""
## Date syntax is taken from the syntax newsyslog uses in newsyslog.conf.
## Some examples:
## $D0 rotate every night at midnight
## $D23 rotate every day at 23:00 hr
## $W0D23 rotate every week on Sunday at 23:00 hr
## $W5D16 rotate every week on Friday at 16:00 hr
## $M1D0 rotate on the first day of every month at midnight
## $M5D6 rotate on every 5th day of the month at 6:00 hr
##
log_rotate_size: 10485760
log_rotate_date: ""
log_rotate_count: 1
##
## overload protection: If you want to limit the number of messages per second
## allowed from error_logger, which is a good idea if you want to avoid a flood
## of messages when system is overloaded, you can set a limit.
## 100 is ejabberd's default.
log_rate_limit: 100
##
## watchdog_admins: Only useful for developers: if an ejabberd process
## consumes a lot of memory, send live notifications to these XMPP
## accounts.
##
## watchdog_admins:
## - "bob@example.com"
###. ===============
###' NODE PARAMETERS
##
## net_ticktime: Specifies net_kernel tick time in seconds. This options must have
## identical value on all nodes, and in most cases shouldn't be changed at all from
## default value.
##
## net_ticktime: 60
###. ================
###' SERVED HOSTNAMES
##
## hosts: Domains served by ejabberd.
## You can define one or several, for example:
## hosts:
## - "example.net"
## - "example.com"
## - "example.org"
##
hosts:
- "localhost"
##
## route_subdomains: Delegate subdomains to other XMPP servers.
## For example, if this ejabberd serves example.org and you want
## to allow communication with an XMPP server called im.example.org.
##
## route_subdomains: s2s
###. ===============
###' LISTENING PORTS
##
## listen: The ports ejabberd will listen on, which service each is handled
## by and what options to start it with.
##
listen:
-
port: 5222
module: ejabberd_c2s
##
## If TLS is compiled in and you installed a SSL
## certificate, specify the full path to the
## file and uncomment these lines:
##
## certfile: "/path/to/ssl.pem"
## starttls: true
##
## To enforce TLS encryption for client connections,
## use this instead of the "starttls" option:
##
## starttls_required: true
##
## Custom OpenSSL options
##
## protocol_options:
## - "no_sslv3"
## - "no_tlsv1"
max_stanza_size: 65536
shaper: c2s_shaper
access: c2s
-
port: 5269
module: ejabberd_s2s_in
##
## ejabberd_service: Interact with external components (transports, ...)
##
## -
## port: 8888
## module: ejabberd_service
## access: all
## shaper_rule: fast
## ip: "127.0.0.1"
## hosts:
## "icq.example.org":
## password: "secret"
## "sms.example.org":
## password: "secret"
##
## ejabberd_stun: Handles STUN Binding requests
##
## -
## port: 3478
## transport: udp
## module: ejabberd_stun
##
## To handle XML-RPC requests that provide admin credentials:
##
## -
## port: 4560
## module: ejabberd_xmlrpc
-
port: 5280
module: ejabberd_http
request_handlers:
"/websocket": ejabberd_http_ws
## "/pub/archive": mod_http_fileserver
web_admin: true
http_bind: true
## register: true
captcha: true
###. ==================
###' S2S GLOBAL OPTIONS
##
## s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
## Allowed values are: false optional required required_trusted
## You must specify a certificate file.
##
## s2s_use_starttls: optional
##
## s2s_certfile: Specify a certificate file.
##
## s2s_certfile: "/path/to/ssl.pem"
## Custom OpenSSL options
##
## s2s_protocol_options:
## - "no_sslv3"
## - "no_tlsv1"
##
## domain_certfile: Specify a different certificate for each served hostname.
##
## host_config:
## "example.org":
## domain_certfile: "/path/to/example_org.pem"
## "example.com":
## domain_certfile: "/path/to/example_com.pem"
##
## S2S whitelist or blacklist
##
## Default s2s policy for undefined hosts.
##
## s2s_access: s2s
##
## Outgoing S2S options
##
## Preferred address families (which to try first) and connect timeout
## in milliseconds.
##
## outgoing_s2s_families:
## - ipv4
## - ipv6
## outgoing_s2s_timeout: 10000
###. ==============
###' AUTHENTICATION
##
## auth_method: Method used to authenticate the users.
## The default method is the internal.
## If you want to use a different method,
## comment this line and enable the correct ones.
##
auth_method: internal
##
## Store the plain passwords or hashed for SCRAM:
## auth_password_format: plain
## auth_password_format: scram
##
## Define the FQDN if ejabberd doesn't detect it:
## fqdn: "server3.example.com"
##
## Authentication using external script
## Make sure the script is executable by ejabberd.
##
## auth_method: external
## extauth_program: "/path/to/authentication/script"
##
## Authentication using ODBC
## Remember to setup a database in the next section.
##
## auth_method: odbc
##
## Authentication using PAM
##
## auth_method: pam
## pam_service: "pamservicename"
##
## Authentication using LDAP
##
## auth_method: ldap
##
## List of LDAP servers:
## ldap_servers:
## - "localhost"
##
## Encryption of connection to LDAP servers:
## ldap_encrypt: none
## ldap_encrypt: tls
##
## Port to connect to on LDAP servers:
## ldap_port: 389
## ldap_port: 636
##
## LDAP manager:
## ldap_rootdn: "dc=example,dc=com"
##
## Password of LDAP manager:
## ldap_password: "******"
##
## Search base of LDAP directory:
## ldap_base: "dc=example,dc=com"
##
## LDAP attribute that holds user ID:
## ldap_uids:
## - "mail": "%u@mail.example.org"
##
## LDAP filter:
## ldap_filter: "(objectClass=shadowAccount)"
##
## Anonymous login support:
## auth_method: anonymous
## anonymous_protocol: sasl_anon | login_anon | both
## allow_multiple_connections: true | false
##
## host_config:
## "public.example.org":
## auth_method: anonymous
## allow_multiple_connections: false
## anonymous_protocol: sasl_anon
##
## To use both anonymous and internal authentication:
##
## host_config:
## "public.example.org":
## auth_method:
## - internal
## - anonymous
###. ==============
###' DATABASE SETUP
## ejabberd by default uses the internal Mnesia database,
## so you do not necessarily need this section.
## This section provides configuration examples in case
## you want to use other database backends.
## Please consult the ejabberd Guide for details on database creation.
##
## MySQL server:
##
## odbc_type: mysql
## odbc_server: "server"
## odbc_database: "database"
## odbc_username: "username"
## odbc_password: "password"
##
## If you want to specify the port:
## odbc_port: 1234
##
## PostgreSQL server:
##
## odbc_type: pgsql
## odbc_server: "server"
## odbc_database: "database"
## odbc_username: "username"
## odbc_password: "password"
##
## If you want to specify the port:
## odbc_port: 1234
##
## If you use PostgreSQL, have a large database, and need a
## faster but inexact replacement for "select count(*) from users"
##
## pgsql_users_number_estimate: true
##
## SQLite:
##
## odbc_type: sqlite
## odbc_database: "/path/to/database.db"
##
## ODBC compatible or MSSQL server:
##
## odbc_type: odbc
## odbc_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
##
## Number of connections to open to the database for each virtual host
##
## odbc_pool_size: 10
##
## Interval to make a dummy SQL request to keep the connections to the
## database alive. Specify in seconds: for example 28800 means 8 hours
##
## odbc_keepalive_interval: undefined
###. ===============
###' TRAFFIC SHAPERS
shaper:
##
## The "normal" shaper limits traffic speed to 1000 B/s
##
normal: 1000
##
## The "fast" shaper limits traffic speed to 50000 B/s
##
fast: 50000
##
## This option specifies the maximum number of elements in the queue
## of the FSM. Refer to the documentation for details.
##
max_fsm_queue: 1000
###. ====================
###' ACCESS CONTROL LISTS
acl:
##
## The 'admin' ACL grants administrative privileges to XMPP accounts.
## You can put here as many accounts as you want.
##
## admin:
## user:
## - "aleksey": "localhost"
## - "ermine": "example.org"
##
## Blocked users
##
## blocked:
## user:
## - "baduser": "example.org"
## - "test"
## Local users: don't modify this.
##
local:
user_regexp: ""
##
## More examples of ACLs
##
## jabberorg:
## server:
## - "jabber.org"
## aleksey:
## user:
## - "aleksey": "jabber.ru"
## test:
## user_regexp: "^test"
## user_glob: "test*"
##
## Loopback network
##
loopback:
ip:
- "127.0.0.0/8"
##
## Bad XMPP servers
##
## bad_servers:
## server:
## - "xmpp.zombie.org"
## - "xmpp.spam.com"
##
## Define specific ACLs in a virtual host.
##
## host_config:
## "localhost":
## acl:
## admin:
## user:
## - "bob-local": "localhost"
###. ============
###' ACCESS RULES
access:
## Maximum number of simultaneous sessions allowed for a single user:
max_user_sessions:
all: 10
## Maximum number of offline messages that users can have:
max_user_offline_messages:
admin: 5000
all: 100
## This rule allows access only for local users:
local:
local: allow
## Only non-blocked users can use c2s connections:
c2s:
blocked: deny
all: allow
## For C2S connections, all users except admins use the "normal" shaper
c2s_shaper:
admin: none
all: normal
## All S2S connections use the "fast" shaper
s2s_shaper:
all: fast
## Only admins can send announcement messages:
announce:
admin: allow
## Only admins can use the configuration interface:
configure:
admin: allow
## Admins of this server are also admins of the MUC service:
muc_admin:
admin: allow
## Only accounts of the local ejabberd server can create rooms:
muc_create:
local: allow
## All users are allowed to use the MUC service:
muc:
all: allow
## Only accounts on the local ejabberd server can create Pubsub nodes:
pubsub_createnode:
local: allow
## In-band registration allows registration of any possible username.
## To disable in-band registration, replace 'allow' with 'deny'.
register:
all: allow
## Only allow to register from localhost
trusted_network:
loopback: allow
## Do not establish S2S connections with bad servers
## s2s:
## bad_servers: deny
## all: allow
## By default the frequency of account registrations from the same IP
## is limited to 1 account every 10 minutes. To disable, specify: infinity
## registration_timeout: 600
##
## Define specific Access Rules in a virtual host.
##
## host_config:
## "localhost":
## access:
## c2s:
## admin: allow
## all: deny
## register:
## all: deny
###. ================
###' DEFAULT LANGUAGE
##
## language: Default language used for server messages.
##
language: "en"
##
## Set a different default language in a virtual host.
##
## host_config:
## "localhost":
## language: "ru"
###. =======
###' CAPTCHA
##
## Full path to a script that generates the image.
##
## captcha_cmd: "/lib/ejabberd/priv/bin/captcha.sh"
##
## Host for the URL and port where ejabberd listens for CAPTCHA requests.
##
## captcha_host: "example.org:5280"
##
## Limit CAPTCHA calls per minute for JID/IP to avoid DoS.
##
## captcha_limit: 5
###. =======
###' MODULES
##
## Modules enabled in all ejabberd virtual hosts.
##
modules:
mod_adhoc: {}
## mod_admin_extra: {}
mod_announce: # recommends mod_adhoc
access: announce
mod_blocking: {} # requires mod_privacy
mod_caps: {}
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {} # requires mod_adhoc
mod_disco: {}
## mod_echo: {}
mod_irc: {}
mod_http_bind: {}
## mod_http_fileserver:
## docroot: "/var/www"
## accesslog: "/var/log/ejabberd/access.log"
mod_last: {}
mod_muc:
## host: "conference.@HOST@"
access: muc
access_create: muc_create
access_persistent: muc_create
access_admin: muc_admin
## mod_muc_log: {}
## mod_multicast: {}
mod_offline:
access_max_user_messages: max_user_offline_messages
mod_ping: {}
## mod_pres_counter:
## count: 5
## interval: 60
mod_privacy: {}
mod_private: {}
## mod_proxy65: {}
mod_pubsub:
access_createnode: pubsub_createnode
## reduces resource comsumption, but XEP incompliant
ignore_pep_from_offline: true
## XEP compliant, but increases resource comsumption
## ignore_pep_from_offline: false
last_item_cache: false
plugins:
- "flat"
- "hometree"
- "pep" # pep requires mod_caps
mod_register:
##
## Protect In-Band account registrations with CAPTCHA.
##
## captcha_protected: true
##
## Set the minimum informational entropy for passwords.
##
## password_strength: 32
##
## After successful registration, the user receives
## a message with this subject and body.
##
welcome_message:
subject: "Welcome!"
body: |-
Hi.
Welcome to this XMPP server.
##
## When a user registers, send a notification to
## these XMPP accounts.
##
## registration_watchers:
## - "admin1@example.org"
##
## Only clients in the server machine can register accounts
##
ip_access: trusted_network
##
## Local c2s or remote s2s users cannot register accounts
##
## access_from: deny
access: register
mod_roster: {}
mod_shared_roster: {}
mod_stats: {}
mod_time: {}
mod_vcard: {}
mod_version: {}
##
## Enable modules with custom options in a specific virtual host
##
## host_config:
## "localhost":
## modules:
## mod_echo:
## host: "mirror.localhost"
##
## Enable modules management via ejabberdctl for installation and
## uninstallation of public/private contributed modules
## (enabled by default)
##
allow_contrib_modules: true
###.
###'
### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8 foldmarker=###',###. foldmethod=marker:
-466
View File
@@ -1,466 +0,0 @@
#!/bin/sh
# define default configuration
POLL=true
SMP=auto
ERL_MAX_PORTS=32000
ERL_PROCESSES=250000
ERL_MAX_ETS_TABLES=1400
FIREWALL_WINDOW=""
ERLANG_NODE=ejabberd@localhost
# define default environment variables
SCRIPT_DIR=`cd ${0%/*} && pwd`
ERL={{erl}}
IEX={{bindir}}/iex
EPMD={{bindir}}/epmd
INSTALLUSER={{installuser}}
ERL_LIBS={{libdir}}
# check the proper system user is used if defined
if [ "$INSTALLUSER" != "" ] ; then
EXEC_CMD="false"
for GID in `id -G`; do
if [ $GID -eq 0 ] ; then
INSTALLUSER_HOME=$(getent passwd "$INSTALLUSER" | cut -d: -f6)
if [ -n "$INSTALLUSER_HOME" ] && [ ! -d "$INSTALLUSER_HOME" ] ; then
mkdir -p "$INSTALLUSER_HOME"
chown "$INSTALLUSER" "$INSTALLUSER_HOME"
fi
EXEC_CMD="su $INSTALLUSER -c"
fi
done
if [ `id -g` -eq `id -g $INSTALLUSER` ] ; then
EXEC_CMD="sh -c"
fi
if [ "$EXEC_CMD" = "false" ] ; then
echo "This command can only be run by root or the user $INSTALLUSER" >&2
exit 4
fi
else
EXEC_CMD="sh -c"
fi
# parse command line parameters
ARGS=""
while [ $# -ne 0 ] ; do
PARAM=$1
shift
case $PARAM in
--) break ;;
--node) ERLANG_NODE_ARG=$1 ; shift ;;
--config-dir) ETC_DIR="$1" ; shift ;;
--config) EJABBERD_CONFIG_PATH="$1" ; shift ;;
--ctl-config) EJABBERDCTL_CONFIG_PATH="$1" ; shift ;;
--logs) LOGS_DIR="$1" ; shift ;;
--spool) SPOOL_DIR="$1" ; shift ;;
*) ARGS="$ARGS $PARAM" ;;
esac
done
# Define ejabberd variable if they have not been defined from the command line
if [ "$ETC_DIR" = "" ] ; then
ETC_DIR={{sysconfdir}}/ejabberd
fi
if [ "$EJABBERDCTL_CONFIG_PATH" = "" ] ; then
EJABBERDCTL_CONFIG_PATH=$ETC_DIR/ejabberdctl.cfg
fi
if [ -f "$EJABBERDCTL_CONFIG_PATH" ] ; then
. "$EJABBERDCTL_CONFIG_PATH"
fi
if [ "$EJABBERD_CONFIG_PATH" = "" ] ; then
EJABBERD_CONFIG_PATH=$ETC_DIR/ejabberd.yml
fi
if [ "$LOGS_DIR" = "" ] ; then
LOGS_DIR={{localstatedir}}/log/ejabberd
fi
if [ "$SPOOL_DIR" = "" ] ; then
SPOOL_DIR={{localstatedir}}/lib/ejabberd
fi
if [ "$EJABBERD_DOC_PATH" = "" ] ; then
EJABBERD_DOC_PATH={{docdir}}
fi
if [ "$ERLANG_NODE_ARG" != "" ] ; then
ERLANG_NODE=$ERLANG_NODE_ARG
NODE=${ERLANG_NODE%@*}
fi
if [ "{{release}}" != "true" ] ; then
if [ "$EJABBERDDIR" = "" ] ; then
EJABBERDDIR={{libdir}}/ejabberd
fi
if [ "$EJABBERD_PRIV_PATH" = "" ] ; then
EJABBERD_PRIV_PATH=$EJABBERDDIR/priv
fi
if [ "$EJABBERD_BIN_PATH" = "" ] ; then
EJABBERD_BIN_PATH=$EJABBERD_PRIV_PATH/bin
fi
fi
EJABBERD_LOG_PATH=$LOGS_DIR/ejabberd.log
DATETIME=`date "+%Y%m%d-%H%M%S"`
ERL_CRASH_DUMP=$LOGS_DIR/erl_crash_$DATETIME.dump
ERL_INETRC=$ETC_DIR/inetrc
# define mnesia options
MNESIA_OPTS="-mnesia dir \"\\\"$SPOOL_DIR\\\"\" $MNESIA_OPTIONS"
# define erl parameters
ERL_OPTIONS=$(echo $ERL_OPTIONS | sed 's/ /\\ /g')
ERLANG_OPTS="+K $POLL -smp $SMP +P $ERL_PROCESSES $ERL_OPTIONS"
KERNEL_OPTS=""
if [ "$FIREWALL_WINDOW" != "" ] ; then
KERNEL_OPTS="${KERNEL_OPTS} -kernel inet_dist_listen_min ${FIREWALL_WINDOW%-*} inet_dist_listen_max ${FIREWALL_WINDOW#*-}"
fi
if [ "$INET_DIST_INTERFACE" != "" ] ; then
INET_DIST_INTERFACE2="$(echo $INET_DIST_INTERFACE | sed 's/\./,/g')"
if [ "$INET_DIST_INTERFACE" != "$INET_DIST_INTERFACE2" ] ; then
INET_DIST_INTERFACE2="{$INET_DIST_INTERFACE2}"
fi
KERNEL_OPTS="${KERNEL_OPTS} -kernel inet_dist_use_interface \"${INET_DIST_INTERFACE2}\""
fi
if [ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] ; then
NAME="-sname"
else
NAME="-name"
fi
IEXNAME="-$NAME"
# define ejabberd environment parameters
if [ "$EJABBERD_CONFIG_PATH" != "${EJABBERD_CONFIG_PATH%.yml}" ] ; then
rate=$(sed '/^[ ]*log_rate_limit/!d;s/.*://;s/ *//' $EJABBERD_CONFIG_PATH)
rotate=$(sed '/^[ ]*log_rotate_size/!d;s/.*://;s/ *//' $EJABBERD_CONFIG_PATH)
count=$(sed '/^[ ]*log_rotate_count/!d;s/.*://;s/ *//' $EJABBERD_CONFIG_PATH)
date=$(sed '/^[ ]*log_rotate_date/!d;s/.*://;s/ *//' $EJABBERD_CONFIG_PATH)
else
rate=$(sed '/^[ ]*log_rate_limit/!d;s/.*,//;s/ *//;s/}\.//' $EJABBERD_CONFIG_PATH)
rotate=$(sed '/^[ ]*log_rotate_size/!d;s/.*,//;s/ *//;s/}\.//' $EJABBERD_CONFIG_PATH)
count=$(sed '/^[ ]*log_rotate_count/!d;s/.*,//;s/ *//;s/}\.//' $EJABBERD_CONFIG_PATH)
date=$(sed '/^[ ]*log_rotate_date/!d;s/.*,//;s/ *//;s/}\.//' $EJABBERD_CONFIG_PATH)
fi
[ -z "$rate" ] || EJABBERD_OPTS="log_rate_limit $rate"
[ -z "$rotate" ] || EJABBERD_OPTS="${EJABBERD_OPTS} log_rotate_size $rotate"
[ -z "$count" ] || EJABBERD_OPTS="${EJABBERD_OPTS} log_rotate_count $count"
[ -z "$date" ] || EJABBERD_OPTS="${EJABBERD_OPTS} log_rotate_date '$date'"
[ -z "$EJABBERD_OPTS" ] || EJABBERD_OPTS="-ejabberd ${EJABBERD_OPTS}"
[ -d $SPOOL_DIR ] || $EXEC_CMD "mkdir -p $SPOOL_DIR"
cd $SPOOL_DIR
# export global variables
export EJABBERD_CONFIG_PATH
export EJABBERD_LOG_PATH
export EJABBERD_BIN_PATH
export EJABBERD_DOC_PATH
export EJABBERD_PID_PATH
export ERL_CRASH_DUMP
export ERL_EPMD_ADDRESS
export ERL_INETRC
export ERL_MAX_PORTS
export ERL_MAX_ETS_TABLES
export CONTRIB_MODULES_PATH
export CONTRIB_MODULES_CONF_DIR
export ERL_LIBS
# start server
start()
{
check_start
$EXEC_CMD "$ERL \
$NAME $ERLANG_NODE \
-noinput -detached \
-pa $EJABBERD_EBIN_PATH \
$MNESIA_OPTS \
$KERNEL_OPTS \
$EJABBERD_OPTS \
-s ejabberd \
$ERLANG_OPTS $ARGS \"$@\""
}
# attach to server
debug()
{
debugwarning
TTY=`tty | sed -e 's/.*\///g'`
$EXEC_CMD "$ERL \
$NAME debug-${TTY}-${ERLANG_NODE} \
-remsh $ERLANG_NODE \
-hidden \
$KERNEL_OPTS \
$ERLANG_OPTS $ARGS \"$@\""
}
# attach to server using Elixir
iexdebug()
{
debugwarning
TTY=`tty | sed -e 's/.*\///g'`
# Elixir shell is hidden as default
$EXEC_CMD "$IEX \
$IEXNAME debug-${TTY}-${ERLANG_NODE} \
--remsh $ERLANG_NODE \
--erl \"$KERNEL_OPTS\" \
--erl \"$ERLANG_OPTS\" --erl \"$ARGS\" --erl \"$@\""
}
# start interactive server
live()
{
livewarning
$EXEC_CMD "$ERL \
$NAME $ERLANG_NODE \
-pa $EJABBERD_EBIN_PATH \
$MNESIA_OPTS \
$KERNEL_OPTS \
$EJABBERD_OPTS \
-s ejabberd \
$ERLANG_OPTS $ARGS \"$@\""
}
# start interactive server with Elixir
iexlive()
{
livewarning
$EXEC_CMD "$IEX \
$IEXNAME $ERLANG_NODE \
-pa $EJABBERD_EBIN_PATH \
--erl \"-mnesia dir \\\"$SPOOL_DIR\\\"\" \
--erl \"$KERNEL_OPTS\" \
--erl \"$EJABBERD_OPTS\" \
--app ejabberd \
--erl \"$ERLANG_OPTS\" --erl $ARGS --erl \"$@\""
}
debugwarning()
{
if [ "$EJABBERD_BYPASS_WARNINGS" != "true" ] ; then
echo "--------------------------------------------------------------------"
echo ""
echo "IMPORTANT: we will attempt to attach an INTERACTIVE shell"
echo "to an already running ejabberd node."
echo "If an ERROR is printed, it means the connection was not successful."
echo "You can interact with the ejabberd node if you know how to use it."
echo "Please be extremely cautious with your actions,"
echo "and exit immediately if you are not completely sure."
echo ""
echo "To detach this shell from ejabberd, press:"
echo " control+c, control+c"
echo ""
echo "--------------------------------------------------------------------"
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
echo " EJABBERD_BYPASS_WARNINGS=true"
echo "Press return to continue"
read foo
echo ""
fi
}
livewarning()
{
check_start
if [ "$EJABBERD_BYPASS_WARNINGS" != "true" ] ; then
echo "--------------------------------------------------------------------"
echo ""
echo "IMPORTANT: ejabberd is going to start in LIVE (interactive) mode."
echo "All log messages will be shown in the command shell."
echo "You can interact with the ejabberd node if you know how to use it."
echo "Please be extremely cautious with your actions,"
echo "and exit immediately if you are not completely sure."
echo ""
echo "To exit this LIVE mode and stop ejabberd, press:"
echo " q(). and press the Enter key"
echo ""
echo "--------------------------------------------------------------------"
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
echo " EJABBERD_BYPASS_WARNINGS=true"
echo "Press return to continue"
read foo
echo ""
fi
}
etop()
{
TTY=`tty | sed -e 's/.*\///g'`
$EXEC_CMD "$ERL \
$NAME debug-${TTY}-${ERLANG_NODE} \
-hidden -s etop -s erlang halt -output text -node $ERLANG_NODE"
}
ping()
{
TTY=`tty | sed -e 's/.*\///g'`
$EXEC_CMD "$ERL \
$NAME ping-${TTY}-${ERLANG_NODE} \
-hidden \
-pa $EJABBERD_EBIN_PATH \
$KERNEL_OPTS $ERLANG_OPTS \
-eval 'io:format(\"~p~n\",[net_adm:ping($1)])' \
-s erlang halt -output text -noinput"
}
help()
{
echo ""
echo "Commands to start an ejabberd node:"
echo " start Start an ejabberd node in server mode"
echo " debug Attach an interactive Erlang shell to a running ejabberd node"
echo " iexdebug Attach an interactive Elixir shell to a running ejabberd node"
echo " live Start an ejabberd node in live (interactive) mode"
echo " iexlive Start an ejabberd node in live (interactive) mode, within an Elixir shell"
echo ""
echo "Optional parameters when starting an ejabberd node:"
echo " --config-dir dir Config ejabberd: $ETC_DIR"
echo " --config file Config ejabberd: $EJABBERD_CONFIG_PATH"
echo " --ctl-config file Config ejabberdctl: $EJABBERDCTL_CONFIG_PATH"
echo " --logs dir Directory for logs: $LOGS_DIR"
echo " --spool dir Database spool dir: $SPOOL_DIR"
echo " --node nodename ejabberd node name: $ERLANG_NODE"
echo ""
}
# common control function
ctl()
{
COMMAND=$@
# Control number of connections identifiers
# using flock if available. Expects a linux-style
# flock that can lock a file descriptor.
MAXCONNID=100
CONNLOCKDIR={{localstatedir}}/lock/ejabberdctl
FLOCK=/usr/bin/flock
if [ ! -x "$FLOCK" ] || [ ! -d "$CONNLOCKDIR" ] ; then
JOT=/usr/bin/jot
if [ ! -x "$JOT" ] ; then
# no flock or jot, simply invoke ctlexec()
CTL_CONN="ctl-${ERLANG_NODE}"
ctlexec $CTL_CONN $COMMAND
result=$?
else
# no flock, but at least there is jot
RAND=`jot -r 1 0 $MAXCONNID`
CTL_CONN="ctl-${RAND}-${ERLANG_NODE}"
ctlexec $CTL_CONN $COMMAND
result=$?
fi
else
# we have flock so we get a lock
# on one of a limited number of
# conn names -- this allows
# concurrent invocations using a bound
# number of atoms
for N in `seq 1 $MAXCONNID`; do
CTL_CONN="ejabberdctl-$N"
CTL_LOCKFILE="$CONNLOCKDIR/$CTL_CONN"
(
exec 8>"$CTL_LOCKFILE"
if flock --nb 8; then
ctlexec $CTL_CONN $COMMAND
ssresult=$?
# segregate from possible flock exit(1)
ssresult=`expr $ssresult \* 10`
exit $ssresult
else
exit 1
fi
)
result=$?
if [ $result -eq 1 ] ; then
# means we errored out in flock
# rather than in the exec - stay in the loop
# trying other conn names...
badlock=1
else
badlock=""
break;
fi
done
result=`expr $result / 10`
fi
if [ "$badlock" ] ;then
echo "Ran out of connections to try. Your ejabberd processes" >&2
echo "may be stuck or this is a very busy server. For very" >&2
echo "busy servers, consider raising MAXCONNID in ejabberdctl">&2
exit 1;
fi
case $result in
0) :;;
1) :;;
2) help;;
3) help;;
esac
return $result
}
ctlexec()
{
CONN_NAME=$1; shift
COMMAND=$(echo $@ | sed 's/["&$;\|<>()]/\\&/g')
$EXEC_CMD "$ERL \
$NAME ${CONN_NAME} \
-noinput \
-hidden \
-pa $EJABBERD_EBIN_PATH \
$KERNEL_OPTS \
-s ejabberd_ctl -extra $ERLANG_NODE $COMMAND"
}
# stop epmd if there is no other running node
stop_epmd()
{
$EPMD -names 2>/dev/null | grep -q name || $EPMD -kill >/dev/null
}
# make sure node not already running and node name unregistered
check_start()
{
$EPMD -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
ps ux | grep -v grep | grep -q " $ERLANG_NODE " && {
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
exit 4
} || {
ps ux | grep -v grep | grep -q beam && {
echo "ERROR: The ejabberd node '$ERLANG_NODE' is registered,"
echo " but no related beam process has been found."
echo "Shutdown all other erlang nodes, and call 'epmd -kill'."
exit 5
} || {
$EPMD -kill >/dev/null
}
}
}
}
# allow sync calls
wait_for_status()
{
# args: status try delay
# return: 0 OK, 1 KO
timeout=$2
status=4
while [ $status -ne $1 ] ; do
sleep $3
timeout=`expr $timeout - 1`
[ $timeout -eq 0 ] && {
status=$1
} || {
ctl status > /dev/null
status=$?
}
done
[ $timeout -eq 0 ] && return 1 || return 0
}
# main handler
case $ARGS in
' start') start;;
' debug') debug;;
' iexdebug') iexdebug;;
' live') live;;
' iexlive') iexlive;;
' ping'*) ping ${ARGS# ping};;
' etop') etop;;
' started') wait_for_status 0 30 2;; # wait 30x2s before timeout
' stopped') wait_for_status 3 15 2 && stop_epmd;; # wait 15x2s before timeout
*) ctl $ARGS;;
esac
-16
View File
@@ -42,22 +42,6 @@ while(1)
# password is null. Return 1 if the user $user\@$domain exitst.
$result = 1;
},last SWITCH;
$op eq 'tryregister' and do
{
$result = 1;
},last SWITCH;
$op eq 'removeuser' and do
{
# password is null. Return 1 if the user $user\@$domain exitst.
$result = 1;
},last SWITCH;
$op eq 'removeuser3' and do
{
$result = 1;
},last SWITCH;
};
my $out = pack "nn",2,$result ? 1 : 0;
syswrite STDOUT,$out;
+1 -1
View File
@@ -70,7 +70,7 @@ done
echo '7. compile ejabberd'
gmake
for A in mod_irc mod_muc mod_pubsub; do
for A in mod_muc mod_pubsub; do
(cd $A; gmake)
done
-81
View File
@@ -1,81 +0,0 @@
%% Generated by the Erlang ASN.1 compiler version:2.0.1
%% Purpose: Erlang record definitions for each named and unnamed
%% SEQUENCE and SET, and macro definitions for each value
%% definition,in module ELDAPv3
-record('LDAPMessage',{
messageID, protocolOp, controls = asn1_NOVALUE}).
-record('AttributeValueAssertion',{
attributeDesc, assertionValue}).
-record('Attribute',{
type, vals}).
-record('LDAPResult',{
resultCode, matchedDN, errorMessage, referral = asn1_NOVALUE}).
-record('Control',{
controlType, criticality = asn1_DEFAULT, controlValue = asn1_NOVALUE}).
-record('BindRequest',{
version, name, authentication}).
-record('SaslCredentials',{
mechanism, credentials = asn1_NOVALUE}).
-record('BindResponse',{
resultCode, matchedDN, errorMessage, referral = asn1_NOVALUE, serverSaslCreds = asn1_NOVALUE}).
-record('SearchRequest',{
baseObject, scope, derefAliases, sizeLimit, timeLimit, typesOnly, filter, attributes}).
-record('SubstringFilter',{
type, substrings}).
-record('MatchingRuleAssertion',{
matchingRule = asn1_NOVALUE, type = asn1_NOVALUE, matchValue, dnAttributes = asn1_DEFAULT}).
-record('SearchResultEntry',{
objectName, attributes}).
-record('PartialAttributeList_SEQOF',{
type, vals}).
-record('ModifyRequest',{
object, modification}).
-record('ModifyRequest_modification_SEQOF',{
operation, modification}).
-record('AttributeTypeAndValues',{
type, vals}).
-record('AddRequest',{
entry, attributes}).
-record('AttributeList_SEQOF',{
type, vals}).
-record('ModifyDNRequest',{
entry, newrdn, deleteoldrdn, newSuperior = asn1_NOVALUE}).
-record('CompareRequest',{
entry, ava}).
-record('ExtendedRequest',{
requestName, requestValue = asn1_NOVALUE}).
-record('ExtendedResponse',{
resultCode, matchedDN, errorMessage, referral = asn1_NOVALUE, responseName = asn1_NOVALUE, response = asn1_NOVALUE}).
-record('PasswdModifyRequestValue',{
userIdentity = asn1_NOVALUE, oldPasswd = asn1_NOVALUE, newPasswd = asn1_NOVALUE}).
-record('PasswdModifyResponseValue',{
genPasswd = asn1_NOVALUE}).
-define('maxInt', 2147483647).
-define('passwdModifyOID', [49,46,51,46,54,46,49,46,52,46,49,46,52,50,48,51,46,49,46,49,49,46,49]).
-44
View File
@@ -1,44 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(adhoc_request,
{
lang = <<"">> :: binary(),
node = <<"">> :: binary(),
sessionid = <<"">> :: binary(),
action = <<"">> :: binary(),
xdata = false :: false | xmlel(),
others = [] :: [xmlel()]
}).
-record(adhoc_response,
{
lang = <<"">> :: binary(),
node = <<"">> :: binary(),
sessionid = <<"">> :: binary(),
status :: atom(),
defaultaction = <<"">> :: binary(),
actions = [] :: [binary()],
notes = [] :: [{binary(), binary()}],
elements = [] :: [xmlel()]
}).
-type adhoc_request() :: #adhoc_request{}.
-type adhoc_response() :: #adhoc_response{}.
-72
View File
@@ -1,72 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-ifndef(EJABBERD_HRL).
-define(EJABBERD_HRL, true).
-define(VERSION, ejabberd_config:get_version()).
-define(MYHOSTS, ejabberd_config:get_myhosts()).
-define(MYNAME, hd(ejabberd_config:get_myhosts())).
-define(MYLANG, ejabberd_config:get_mylang()).
-define(MSGS_DIR, filename:join(["priv", "msgs"])).
-define(SQL_DIR, filename:join(["priv", "sql"])).
-define(CONFIG_PATH, <<"ejabberd.cfg">>).
-define(LOG_PATH, <<"ejabberd.log">>).
-define(EJABBERD_URI, <<"http://www.process-one.net/en/ejabberd/">>).
-define(S2STIMEOUT, 600000).
%%-define(DBGFSM, true).
-record(scram,
{storedkey = <<"">>,
serverkey = <<"">>,
salt = <<"">>,
iterationcount = 0 :: integer()}).
-type scram() :: #scram{}.
-define(SCRAM_DEFAULT_ITERATION_COUNT, 4096).
-ifdef(ERL_DEPRECATED_TYPES).
-define(TDICT, dict()).
-define(TGB_TREE, gb_tree()).
-define(TGB_SET, gb_set()).
-define(TQUEUE, queue()).
-else.
-define(TDICT, dict:dict()).
-define(TGB_TREE, gb_trees:tree()).
-define(TGB_SET, gb_set:set()).
-define(TQUEUE, queue:queue()).
-endif.
-endif.
-52
View File
@@ -1,52 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(request,
{method :: method(),
path = [] :: [binary()],
q = [] :: [{binary() | nokey, binary()}],
us = {<<>>, <<>>} :: {binary(), binary()},
auth :: {binary(), binary()} |
{auth_jid, {binary(), binary()}, jlib:jid()},
lang = <<"">> :: binary(),
data = <<"">> :: binary(),
ip :: {inet:ip_address(), inet:port_number()},
host = <<"">> :: binary(),
port = 5280 :: inet:port_number(),
opts = [] :: list(),
tp = http :: protocol(),
headers = [] :: [{atom() | binary(), binary()}]}).
-record(ws,
{socket :: inet:socket() | p1_tls:tls_socket(),
sockmod = gen_tcp :: gen_tcp | p1_tls,
ip :: {inet:ip_address(), inet:port_number()},
host = <<"">> :: binary(),
port = 5280 :: inet:port_number(),
path = [] :: [binary()],
headers = [] :: [{atom() | binary(), binary()}],
local_path = [] :: [binary()],
q = [] :: [{binary() | nokey, binary()}],
buf :: binary(),
http_opts = [] :: list()}).
-type method() :: 'GET' | 'HEAD' | 'DELETE' | 'OPTIONS' | 'PUT' | 'POST' | 'TRACE'.
-type protocol() :: http | https.
-type http_request() :: #request{}.
-12
View File
@@ -1,12 +0,0 @@
-ifndef(EJABBERD_SM_HRL).
-define(EJABBERD_SM_HRL, true).
-record(session, {sid, usr, us, priority, info}).
-record(session_counter, {vhost, count}).
-type sid() :: {erlang:timestamp(), pid()}.
-type ip() :: {inet:ip_address(), inet:port_number()} | undefined.
-type info() :: [{conn, atom()} | {ip, ip()} | {node, atom()}
| {oor, boolean()} | {auth_module, atom()}].
-type prio() :: undefined | integer().
-endif.
-104
View File
@@ -1,104 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-define(X(Name),
#xmlel{name = Name, attrs = [], children = []}).
-define(XA(Name, Attrs),
#xmlel{name = Name, attrs = Attrs, children = []}).
-define(XE(Name, Els),
#xmlel{name = Name, attrs = [], children = Els}).
-define(XAE(Name, Attrs, Els),
#xmlel{name = Name, attrs = Attrs, children = Els}).
-define(C(Text), {xmlcdata, Text}).
-define(XC(Name, Text), ?XE(Name, [?C(Text)])).
-define(XAC(Name, Attrs, Text),
?XAE(Name, Attrs, [?C(Text)])).
-define(T(Text), translate:translate(Lang, Text)).
-define(CT(Text), ?C((?T(Text)))).
-define(XCT(Name, Text), ?XC(Name, (?T(Text)))).
-define(XACT(Name, Attrs, Text),
?XAC(Name, Attrs, (?T(Text)))).
-define(LI(Els), ?XE(<<"li">>, Els)).
-define(A(URL, Els),
?XAE(<<"a">>, [{<<"href">>, URL}], Els)).
-define(AC(URL, Text), ?A(URL, [?C(Text)])).
-define(ACT(URL, Text), ?AC(URL, (?T(Text)))).
-define(P, ?X(<<"p">>)).
-define(BR, ?X(<<"br">>)).
-define(INPUT(Type, Name, Value),
?XA(<<"input">>,
[{<<"type">>, Type}, {<<"name">>, Name},
{<<"value">>, Value}])).
-define(INPUTT(Type, Name, Value),
?INPUT(Type, Name, (?T(Value)))).
-define(INPUTS(Type, Name, Value, Size),
?XA(<<"input">>,
[{<<"type">>, Type}, {<<"name">>, Name},
{<<"value">>, Value}, {<<"size">>, Size}])).
-define(INPUTST(Type, Name, Value, Size),
?INPUT(Type, Name, (?T(Value)), Size)).
-define(ACLINPUT(Text),
?XE(<<"td">>,
[?INPUT(<<"text">>, <<"value", ID/binary>>, Text)])).
-define(TEXTAREA(Name, Rows, Cols, Value),
?XAC(<<"textarea">>,
[{<<"name">>, Name}, {<<"rows">>, Rows},
{<<"cols">>, Cols}],
Value)).
%% Build an xmlelement for result
-define(XRES(Text),
?XAC(<<"p">>, [{<<"class">>, <<"result">>}], Text)).
%% Guide Link
-define(XREST(Text), ?XRES((?T(Text)))).
-define(GL(Ref, Title),
?XAE(<<"div">>, [{<<"class">>, <<"guidelink">>}],
[?XAE(<<"a">>,
[{<<"href">>, <<"/admin/doc/guide.html#", Ref/binary>>},
{<<"target">>, <<"_blank">>}],
[?C(<<"[Guide: ", Title/binary, "]">>)])])).
%% h1 with a Guide Link
-define(H1GL(Name, Ref, Title),
[?XC(<<"h1">>, Name), ?GL(Ref, Title)]).
-63
View File
@@ -1,63 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-define(LDAP_PORT, 389).
-define(LDAPS_PORT, 636).
-type scope() :: baseObject | singleLevel | wholeSubtree.
-record(eldap_search,
{scope = wholeSubtree :: scope(),
base = <<"">> :: binary(),
filter :: eldap:filter(),
limit = 0 :: non_neg_integer(),
attributes = [] :: [binary()],
types_only = false :: boolean(),
deref_aliases = neverDerefAliases :: neverDerefAliases |
derefInSearching |
derefFindingBaseObj |
derefAlways,
timeout = 0 :: non_neg_integer()}).
-record(eldap_search_result, {entries = [] :: [eldap_entry()],
referrals = [] :: list()}).
-record(eldap_entry, {object_name = <<>> :: binary(),
attributes = [] :: [{binary(), [binary()]}]}).
-type tlsopts() :: [{encrypt, tls | starttls | none} |
{tls_cacertfile, binary() | undefined} |
{tls_depth, non_neg_integer() | undefined} |
{tls_verify, hard | soft | false}].
-record(eldap_config, {servers = [] :: [binary()],
backups = [] :: [binary()],
tls_options = [] :: tlsopts(),
port = ?LDAP_PORT :: inet:port_number(),
dn = <<"">> :: binary(),
password = <<"">> :: binary(),
base = <<"">> :: binary(),
deref_aliases = never :: never | searching |
finding | always}).
-type eldap_config() :: #eldap_config{}.
-type eldap_search() :: #eldap_search{}.
-type eldap_entry() :: #eldap_entry{}.
-49
View File
@@ -1,49 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-define(CT_XML,
{<<"Content-Type">>, <<"text/xml; charset=utf-8">>}).
-define(CT_PLAIN,
{<<"Content-Type">>, <<"text/plain">>}).
-define(AC_ALLOW_ORIGIN,
{<<"Access-Control-Allow-Origin">>, <<"*">>}).
-define(AC_ALLOW_METHODS,
{<<"Access-Control-Allow-Methods">>,
<<"GET, POST, OPTIONS">>}).
-define(AC_ALLOW_HEADERS,
{<<"Access-Control-Allow-Headers">>,
<<"Content-Type">>}).
-define(AC_MAX_AGE,
{<<"Access-Control-Max-Age">>, <<"86400">>}).
-define(NO_CACHE,
{<<"Cache-Control">>, <<"max-age=0, no-cache, no-store">>}).
-define(OPTIONS_HEADER,
[?CT_PLAIN, ?AC_ALLOW_ORIGIN, ?AC_ALLOW_METHODS,
?AC_ALLOW_HEADERS, ?AC_MAX_AGE]).
-define(HEADER,
[?CT_XML, ?AC_ALLOW_ORIGIN, ?AC_ALLOW_HEADERS, ?NO_CACHE]).
-505
View File
@@ -1,505 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-include("ns.hrl").
-ifdef(NO_EXT_LIB).
-include("xml.hrl").
-else.
-include_lib("p1_xml/include/xml.hrl").
-endif.
-define(STANZA_ERROR(Code, Type, Condition),
#xmlel{name = <<"error">>,
attrs = [{<<"code">>, Code}, {<<"type">>, Type}],
children =
[#xmlel{name = Condition,
attrs = [{<<"xmlns">>, ?NS_STANZAS}],
children = []}]}).
-define(ERR_BAD_FORMAT,
?STANZA_ERROR(<<"406">>, <<"modify">>,
<<"bad-format">>)).
-define(ERR_BAD_REQUEST,
?STANZA_ERROR(<<"400">>, <<"modify">>,
<<"bad-request">>)).
-define(ERR_CONFLICT,
?STANZA_ERROR(<<"409">>, <<"cancel">>, <<"conflict">>)).
-define(ERR_FEATURE_NOT_IMPLEMENTED,
?STANZA_ERROR(<<"501">>, <<"cancel">>,
<<"feature-not-implemented">>)).
-define(ERR_FORBIDDEN,
?STANZA_ERROR(<<"403">>, <<"auth">>, <<"forbidden">>)).
-define(ERR_GONE,
?STANZA_ERROR(<<"302">>, <<"modify">>, <<"gone">>)).
-define(ERR_INTERNAL_SERVER_ERROR,
?STANZA_ERROR(<<"500">>, <<"wait">>,
<<"internal-server-error">>)).
-define(ERR_ITEM_NOT_FOUND,
?STANZA_ERROR(<<"404">>, <<"cancel">>,
<<"item-not-found">>)).
-define(ERR_JID_MALFORMED,
?STANZA_ERROR(<<"400">>, <<"modify">>,
<<"jid-malformed">>)).
-define(ERR_NOT_ACCEPTABLE,
?STANZA_ERROR(<<"406">>, <<"modify">>,
<<"not-acceptable">>)).
-define(ERR_NOT_ALLOWED,
?STANZA_ERROR(<<"405">>, <<"cancel">>,
<<"not-allowed">>)).
-define(ERR_NOT_AUTHORIZED,
?STANZA_ERROR(<<"401">>, <<"auth">>,
<<"not-authorized">>)).
-define(ERR_PAYMENT_REQUIRED,
?STANZA_ERROR(<<"402">>, <<"auth">>,
<<"payment-required">>)).
-define(ERR_RECIPIENT_UNAVAILABLE,
?STANZA_ERROR(<<"404">>, <<"wait">>,
<<"recipient-unavailable">>)).
-define(ERR_REDIRECT,
?STANZA_ERROR(<<"302">>, <<"modify">>, <<"redirect">>)).
-define(ERR_REGISTRATION_REQUIRED,
?STANZA_ERROR(<<"407">>, <<"auth">>,
<<"registration-required">>)).
-define(ERR_REMOTE_SERVER_NOT_FOUND,
?STANZA_ERROR(<<"404">>, <<"cancel">>,
<<"remote-server-not-found">>)).
-define(ERR_REMOTE_SERVER_TIMEOUT,
?STANZA_ERROR(<<"504">>, <<"wait">>,
<<"remote-server-timeout">>)).
-define(ERR_RESOURCE_CONSTRAINT,
?STANZA_ERROR(<<"500">>, <<"wait">>,
<<"resource-constraint">>)).
-define(ERR_SERVICE_UNAVAILABLE,
?STANZA_ERROR(<<"503">>, <<"cancel">>,
<<"service-unavailable">>)).
-define(ERR_SUBSCRIPTION_REQUIRED,
?STANZA_ERROR(<<"407">>, <<"auth">>,
<<"subscription-required">>)).
-define(ERR_UNEXPECTED_REQUEST,
?STANZA_ERROR(<<"400">>, <<"wait">>,
<<"unexpected-request">>)).
-define(ERR_UNEXPECTED_REQUEST_CANCEL,
?STANZA_ERROR(<<"401">>, <<"cancel">>,
<<"unexpected-request">>)).
%-define(ERR_,
% ?STANZA_ERROR("", "", "")).
-define(STANZA_ERRORT(Code, Type, Condition, Lang,
Text),
#xmlel{name = <<"error">>,
attrs = [{<<"code">>, Code}, {<<"type">>, Type}],
children =
[#xmlel{name = Condition,
attrs = [{<<"xmlns">>, ?NS_STANZAS}], children = []},
#xmlel{name = <<"text">>,
attrs = [{<<"xmlns">>, ?NS_STANZAS}],
children =
[{xmlcdata,
translate:translate(Lang, Text)}]}]}).
-define(ERRT_BAD_FORMAT(Lang, Text),
?STANZA_ERRORT(<<"406">>, <<"modify">>,
<<"bad-format">>, Lang, Text)).
-define(ERRT_BAD_REQUEST(Lang, Text),
?STANZA_ERRORT(<<"400">>, <<"modify">>,
<<"bad-request">>, Lang, Text)).
-define(ERRT_CONFLICT(Lang, Text),
?STANZA_ERRORT(<<"409">>, <<"cancel">>, <<"conflict">>,
Lang, Text)).
-define(ERRT_FEATURE_NOT_IMPLEMENTED(Lang, Text),
?STANZA_ERRORT(<<"501">>, <<"cancel">>,
<<"feature-not-implemented">>, Lang, Text)).
-define(ERRT_FORBIDDEN(Lang, Text),
?STANZA_ERRORT(<<"403">>, <<"auth">>, <<"forbidden">>,
Lang, Text)).
-define(ERRT_GONE(Lang, Text),
?STANZA_ERRORT(<<"302">>, <<"modify">>, <<"gone">>,
Lang, Text)).
-define(ERRT_INTERNAL_SERVER_ERROR(Lang, Text),
?STANZA_ERRORT(<<"500">>, <<"wait">>,
<<"internal-server-error">>, Lang, Text)).
-define(ERRT_ITEM_NOT_FOUND(Lang, Text),
?STANZA_ERRORT(<<"404">>, <<"cancel">>,
<<"item-not-found">>, Lang, Text)).
-define(ERRT_JID_MALFORMED(Lang, Text),
?STANZA_ERRORT(<<"400">>, <<"modify">>,
<<"jid-malformed">>, Lang, Text)).
-define(ERRT_NOT_ACCEPTABLE(Lang, Text),
?STANZA_ERRORT(<<"406">>, <<"modify">>,
<<"not-acceptable">>, Lang, Text)).
-define(ERRT_NOT_ALLOWED(Lang, Text),
?STANZA_ERRORT(<<"405">>, <<"cancel">>,
<<"not-allowed">>, Lang, Text)).
-define(ERRT_NOT_AUTHORIZED(Lang, Text),
?STANZA_ERRORT(<<"401">>, <<"auth">>,
<<"not-authorized">>, Lang, Text)).
-define(ERRT_PAYMENT_REQUIRED(Lang, Text),
?STANZA_ERRORT(<<"402">>, <<"auth">>,
<<"payment-required">>, Lang, Text)).
-define(ERRT_RECIPIENT_UNAVAILABLE(Lang, Text),
?STANZA_ERRORT(<<"404">>, <<"wait">>,
<<"recipient-unavailable">>, Lang, Text)).
-define(ERRT_REDIRECT(Lang, Text),
?STANZA_ERRORT(<<"302">>, <<"modify">>, <<"redirect">>,
Lang, Text)).
-define(ERRT_REGISTRATION_REQUIRED(Lang, Text),
?STANZA_ERRORT(<<"407">>, <<"auth">>,
<<"registration-required">>, Lang, Text)).
-define(ERRT_REMOTE_SERVER_NOT_FOUND(Lang, Text),
?STANZA_ERRORT(<<"404">>, <<"cancel">>,
<<"remote-server-not-found">>, Lang, Text)).
-define(ERRT_REMOTE_SERVER_TIMEOUT(Lang, Text),
?STANZA_ERRORT(<<"504">>, <<"wait">>,
<<"remote-server-timeout">>, Lang, Text)).
-define(ERRT_RESOURCE_CONSTRAINT(Lang, Text),
?STANZA_ERRORT(<<"500">>, <<"wait">>,
<<"resource-constraint">>, Lang, Text)).
-define(ERRT_SERVICE_UNAVAILABLE(Lang, Text),
?STANZA_ERRORT(<<"503">>, <<"cancel">>,
<<"service-unavailable">>, Lang, Text)).
-define(ERRT_SUBSCRIPTION_REQUIRED(Lang, Text),
?STANZA_ERRORT(<<"407">>, <<"auth">>,
<<"subscription-required">>, Lang, Text)).
-define(ERRT_UNEXPECTED_REQUEST(Lang, Text),
?STANZA_ERRORT(<<"400">>, <<"wait">>,
<<"unexpected-request">>, Lang, Text)).
-define(ERR_AUTH_NO_RESOURCE_PROVIDED(Lang),
?ERRT_NOT_ACCEPTABLE(Lang, <<"No resource provided">>)).
-define(ERR_AUTH_BAD_RESOURCE_FORMAT(Lang),
?ERRT_NOT_ACCEPTABLE(Lang,
<<"Illegal resource format">>)).
-define(ERR_AUTH_RESOURCE_CONFLICT(Lang),
?ERRT_CONFLICT(Lang, <<"Resource conflict">>)).
-define(STREAM_ERROR(Condition, Cdata),
#xmlel{name = <<"stream:error">>, attrs = [],
children =
[#xmlel{name = Condition,
attrs = [{<<"xmlns">>, ?NS_STREAMS}],
children = [{xmlcdata, Cdata}]}]}).
-define(SERR_BAD_FORMAT,
?STREAM_ERROR(<<"bad-format">>, <<"">>)).
-define(SERR_BAD_NAMESPACE_PREFIX,
?STREAM_ERROR(<<"bad-namespace-prefix">>, <<"">>)).
-define(SERR_CONFLICT,
?STREAM_ERROR(<<"conflict">>, <<"">>)).
-define(SERR_CONNECTION_TIMEOUT,
?STREAM_ERROR(<<"connection-timeout">>, <<"">>)).
-define(SERR_HOST_GONE,
?STREAM_ERROR(<<"host-gone">>, <<"">>)).
-define(SERR_HOST_UNKNOWN,
?STREAM_ERROR(<<"host-unknown">>, <<"">>)).
-define(SERR_IMPROPER_ADDRESSING,
?STREAM_ERROR(<<"improper-addressing">>, <<"">>)).
-define(SERR_INTERNAL_SERVER_ERROR,
?STREAM_ERROR(<<"internal-server-error">>, <<"">>)).
-define(SERR_INVALID_FROM,
?STREAM_ERROR(<<"invalid-from">>, <<"">>)).
-define(SERR_INVALID_ID,
?STREAM_ERROR(<<"invalid-id">>, <<"">>)).
-define(SERR_INVALID_NAMESPACE,
?STREAM_ERROR(<<"invalid-namespace">>, <<"">>)).
-define(SERR_INVALID_XML,
?STREAM_ERROR(<<"invalid-xml">>, <<"">>)).
-define(SERR_NOT_AUTHORIZED,
?STREAM_ERROR(<<"not-authorized">>, <<"">>)).
-define(SERR_POLICY_VIOLATION,
?STREAM_ERROR(<<"policy-violation">>, <<"">>)).
-define(SERR_REMOTE_CONNECTION_FAILED,
?STREAM_ERROR(<<"remote-connection-failed">>, <<"">>)).
-define(SERR_RESOURSE_CONSTRAINT,
?STREAM_ERROR(<<"resource-constraint">>, <<"">>)).
-define(SERR_RESTRICTED_XML,
?STREAM_ERROR(<<"restricted-xml">>, <<"">>)).
-define(SERR_SEE_OTHER_HOST(Host),
?STREAM_ERROR(<<"see-other-host">>, Host)).
-define(SERR_SYSTEM_SHUTDOWN,
?STREAM_ERROR(<<"system-shutdown">>, <<"">>)).
-define(SERR_UNSUPPORTED_ENCODING,
?STREAM_ERROR(<<"unsupported-encoding">>, <<"">>)).
-define(SERR_UNSUPPORTED_STANZA_TYPE,
?STREAM_ERROR(<<"unsupported-stanza-type">>, <<"">>)).
-define(SERR_UNSUPPORTED_VERSION,
?STREAM_ERROR(<<"unsupported-version">>, <<"">>)).
-define(SERR_XML_NOT_WELL_FORMED,
?STREAM_ERROR(<<"xml-not-well-formed">>, <<"">>)).
%-define(SERR_,
% ?STREAM_ERROR("", "")).
-define(STREAM_ERRORT(Condition, Cdata, Lang, Text),
#xmlel{name = <<"stream:error">>, attrs = [],
children =
[#xmlel{name = Condition,
attrs = [{<<"xmlns">>, ?NS_STREAMS}],
children = [{xmlcdata, Cdata}]},
#xmlel{name = <<"text">>,
attrs =
[{<<"xml:lang">>, Lang},
{<<"xmlns">>, ?NS_STREAMS}],
children =
[{xmlcdata,
translate:translate(Lang, Text)}]}]}).
-define(SERRT_BAD_FORMAT(Lang, Text),
?STREAM_ERRORT(<<"bad-format">>, <<"">>, Lang, Text)).
-define(SERRT_BAD_NAMESPACE_PREFIX(Lang, Text),
?STREAM_ERRORT(<<"bad-namespace-prefix">>, <<"">>, Lang,
Text)).
-define(SERRT_CONFLICT(Lang, Text),
?STREAM_ERRORT(<<"conflict">>, <<"">>, Lang, Text)).
-define(SERRT_CONNECTION_TIMEOUT(Lang, Text),
?STREAM_ERRORT(<<"connection-timeout">>, <<"">>, Lang,
Text)).
-define(SERRT_HOST_GONE(Lang, Text),
?STREAM_ERRORT(<<"host-gone">>, <<"">>, Lang, Text)).
-define(SERRT_HOST_UNKNOWN(Lang, Text),
?STREAM_ERRORT(<<"host-unknown">>, <<"">>, Lang, Text)).
-define(SERRT_IMPROPER_ADDRESSING(Lang, Text),
?STREAM_ERRORT(<<"improper-addressing">>, <<"">>, Lang,
Text)).
-define(SERRT_INTERNAL_SERVER_ERROR(Lang, Text),
?STREAM_ERRORT(<<"internal-server-error">>, <<"">>,
Lang, Text)).
-define(SERRT_INVALID_FROM(Lang, Text),
?STREAM_ERRORT(<<"invalid-from">>, <<"">>, Lang, Text)).
-define(SERRT_INVALID_ID(Lang, Text),
?STREAM_ERRORT(<<"invalid-id">>, <<"">>, Lang, Text)).
-define(SERRT_INVALID_NAMESPACE(Lang, Text),
?STREAM_ERRORT(<<"invalid-namespace">>, <<"">>, Lang,
Text)).
-define(SERRT_INVALID_XML(Lang, Text),
?STREAM_ERRORT(<<"invalid-xml">>, <<"">>, Lang, Text)).
-define(SERRT_NOT_AUTHORIZED(Lang, Text),
?STREAM_ERRORT(<<"not-authorized">>, <<"">>, Lang,
Text)).
-define(SERRT_POLICY_VIOLATION(Lang, Text),
?STREAM_ERRORT(<<"policy-violation">>, <<"">>, Lang,
Text)).
-define(SERRT_REMOTE_CONNECTION_FAILED(Lang, Text),
?STREAM_ERRORT(<<"remote-connection-failed">>, <<"">>,
Lang, Text)).
-define(SERRT_RESOURSE_CONSTRAINT(Lang, Text),
?STREAM_ERRORT(<<"resource-constraint">>, <<"">>, Lang,
Text)).
-define(SERRT_RESTRICTED_XML(Lang, Text),
?STREAM_ERRORT(<<"restricted-xml">>, <<"">>, Lang,
Text)).
-define(SERRT_SEE_OTHER_HOST(Host, Lang, Text),
?STREAM_ERRORT(<<"see-other-host">>, Host, Lang, Text)).
-define(SERRT_SYSTEM_SHUTDOWN(Lang, Text),
?STREAM_ERRORT(<<"system-shutdown">>, <<"">>, Lang,
Text)).
-define(SERRT_UNSUPPORTED_ENCODING(Lang, Text),
?STREAM_ERRORT(<<"unsupported-encoding">>, <<"">>, Lang,
Text)).
-define(SERRT_UNSUPPORTED_STANZA_TYPE(Lang, Text),
?STREAM_ERRORT(<<"unsupported-stanza-type">>, <<"">>,
Lang, Text)).
-define(SERRT_UNSUPPORTED_VERSION(Lang, Text),
?STREAM_ERRORT(<<"unsupported-version">>, <<"">>, Lang,
Text)).
-define(SERRT_XML_NOT_WELL_FORMED(Lang, Text),
?STREAM_ERRORT(<<"xml-not-well-formed">>, <<"">>, Lang,
Text)).
-record(jid, {user = <<"">> :: binary(),
server = <<"">> :: binary(),
resource = <<"">> :: binary(),
luser = <<"">> :: binary(),
lserver = <<"">> :: binary(),
lresource = <<"">> :: binary()}).
-type(jid() :: #jid{}).
-type(ljid() :: {binary(), binary(), binary()}).
-record(iq, {id = <<"">> :: binary(),
type = get :: get | set | result | error,
xmlns = <<"">> :: binary(),
lang = <<"">> :: binary(),
sub_el = #xmlel{} :: xmlel() | [xmlel()]}).
-type(iq_get()
:: #iq{
id :: binary(),
type :: get,
xmlns :: binary(),
lang :: binary(),
sub_el :: xmlel()
}
).
-type(iq_set()
:: #iq{
id :: binary(),
type :: set,
xmlns :: binary(),
lang :: binary(),
sub_el :: xmlel()
}
).
-type iq_request() :: iq_get() | iq_set().
-type(iq_result()
:: #iq{
id :: binary(),
type :: result,
xmlns :: binary(),
lang :: binary(),
sub_el :: [xmlel()]
}
).
-type(iq_error()
:: #iq{
id :: binary(),
type :: error,
xmlns :: binary(),
lang :: binary(),
sub_el :: [xmlel()]
}
).
-type iq_reply() :: iq_result() | iq_error() .
-type(iq() :: iq_request() | iq_reply()).
-record(rsm_in, {max :: integer() | error,
direction :: before | aft,
id :: binary(),
index :: integer() | error}).
-record(rsm_out, {count :: integer(),
index :: integer(),
first :: binary(),
last :: binary()}).
-type(rsm_in() :: #rsm_in{}).
-type(rsm_out() :: #rsm_out{}).
-type broadcast() :: {broadcast, broadcast_data()}.
-type broadcast_data() ::
{rebind, pid(), binary()} | %% ejabberd_c2s
{item, ljid(), mod_roster:subscription()} | %% mod_roster/mod_shared_roster
{exit, binary()} | %% mod_roster/mod_shared_roster
{privacy_list, mod_privacy:userlist(), binary()} | %% mod_privacy
{blocking, unblock_all | {block | unblock, [ljid()]}}. %% mod_blocking
-record(xmlelement, {name = "" :: string(),
attrs = [] :: [{string(), string()}],
children = [] :: [{xmlcdata, iodata()} | xmlelement()]}).
-type xmlelement() :: #xmlelement{}.
-56
View File
@@ -1,56 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-define(PRINT(Format, Args), io:format(Format, Args)).
-ifdef(LAGER).
-compile([{parse_transform, lager_transform}]).
-define(DEBUG(Format, Args),
lager:debug(Format, Args)).
-define(INFO_MSG(Format, Args),
lager:info(Format, Args)).
-define(WARNING_MSG(Format, Args),
lager:warning(Format, Args)).
-define(ERROR_MSG(Format, Args),
lager:error(Format, Args)).
-define(CRITICAL_MSG(Format, Args),
lager:critical(Format, Args)).
-else.
-define(DEBUG(Format, Args),
p1_logger:debug_msg(?MODULE, ?LINE, Format, Args)).
-define(INFO_MSG(Format, Args),
p1_logger:info_msg(?MODULE, ?LINE, Format, Args)).
-define(WARNING_MSG(Format, Args),
p1_logger:warning_msg(?MODULE, ?LINE, Format, Args)).
-define(ERROR_MSG(Format, Args),
p1_logger:error_msg(?MODULE, ?LINE, Format, Args)).
-define(CRITICAL_MSG(Format, Args),
p1_logger:critical_msg(?MODULE, ?LINE, Format, Args)).
-endif.
-119
View File
@@ -1,119 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-include("ejabberd.hrl").
-define(MAX_USERS_DEFAULT, 200).
-define(SETS, gb_sets).
-define(DICT, dict).
-record(lqueue,
{
queue :: ?TQUEUE,
len :: integer(),
max :: integer()
}).
-type lqueue() :: #lqueue{}.
-record(config,
{
title = <<"">> :: binary(),
description = <<"">> :: binary(),
allow_change_subj = true :: boolean(),
allow_query_users = true :: boolean(),
allow_private_messages = true :: boolean(),
allow_private_messages_from_visitors = anyone :: anyone | moderators | nobody ,
allow_visitor_status = true :: boolean(),
allow_visitor_nickchange = true :: boolean(),
public = true :: boolean(),
public_list = true :: boolean(),
persistent = false :: boolean(),
moderated = true :: boolean(),
captcha_protected = false :: boolean(),
members_by_default = true :: boolean(),
members_only = false :: boolean(),
allow_user_invites = false :: boolean(),
password_protected = false :: boolean(),
password = <<"">> :: binary(),
anonymous = true :: boolean(),
allow_voice_requests = true :: boolean(),
voice_request_min_interval = 1800 :: non_neg_integer(),
max_users = ?MAX_USERS_DEFAULT :: non_neg_integer() | none,
logging = false :: boolean(),
vcard = <<"">> :: binary(),
captcha_whitelist = (?SETS):empty() :: ?TGB_SET,
mam = false :: boolean()
}).
-type config() :: #config{}.
-type role() :: moderator | participant | visitor | none.
-record(user,
{
jid :: jid(),
nick :: binary(),
role :: role(),
last_presence :: xmlel()
}).
-record(activity,
{
message_time = 0 :: integer(),
presence_time = 0 :: integer(),
message_shaper :: shaper:shaper(),
presence_shaper :: shaper:shaper(),
message :: xmlel(),
presence :: {binary(), xmlel()}
}).
-record(state,
{
room = <<"">> :: binary(),
host = <<"">> :: binary(),
server_host = <<"">> :: binary(),
access = {none,none,none,none} :: {atom(), atom(), atom(), atom()},
jid = #jid{} :: jid(),
config = #config{} :: config(),
users = (?DICT):new() :: ?TDICT,
last_voice_request_time = treap:empty() :: treap:treap(),
robots = (?DICT):new() :: ?TDICT,
nicks = (?DICT):new() :: ?TDICT,
affiliations = (?DICT):new() :: ?TDICT,
history :: lqueue(),
subject = <<"">> :: binary(),
subject_author = <<"">> :: binary(),
just_created = false :: boolean(),
activity = treap:empty() :: treap:treap(),
room_shaper = none :: shaper:shaper(),
room_queue = queue:new() :: ?TQUEUE
}).
-record(muc_online_users, {us = {<<>>, <<>>} :: {binary(), binary()},
resource = <<>> :: binary() | '_',
room = <<>> :: binary() | '_' | '$1',
host = <<>> :: binary() | '_' | '$2'}).
-type muc_online_users() :: #muc_online_users{}.
-type muc_room_state() :: #state{}.
-11
View File
@@ -1,11 +0,0 @@
-record(offline_msg,
{us = {<<"">>, <<"">>} :: {binary(), binary()},
timestamp = now() :: erlang:timestamp() | '_',
expire = now() :: erlang:timestamp() | never | '_',
from = #jid{} :: jid() | '_',
to = #jid{} :: jid() | '_',
packet = #xmlel{} :: xmlel() | '_'}).
-record(state,
{host = <<"">> :: binary(),
access_max_offline_messages}).
-43
View File
@@ -1,43 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(privacy, {us = {<<"">>, <<"">>} :: {binary(), binary()},
default = none :: none | binary(),
lists = [] :: [{binary(), [listitem()]}]}).
-record(listitem, {type = none :: none | jid | group | subscription,
value = none :: none | both | from | to | ljid() | binary(),
action = allow :: allow | deny,
order = 0 :: integer(),
match_all = false :: boolean(),
match_iq = false :: boolean(),
match_message = false :: boolean(),
match_presence_in = false :: boolean(),
match_presence_out = false :: boolean()}).
-type listitem() :: #listitem{}.
-record(userlist, {name = none :: none | binary(),
list = [] :: [listitem()],
needdb = false :: boolean()}).
-type userlist() :: #userlist{}.
-export_type([userlist/0]).
-41
View File
@@ -1,41 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(roster,
{
usj = {<<>>, <<>>, {<<>>, <<>>, <<>>}} :: {binary(), binary(), ljid()} | '_',
us = {<<>>, <<>>} :: {binary(), binary()} | '_',
jid = {<<>>, <<>>, <<>>} :: ljid(),
name = <<>> :: binary() | '_',
subscription = none :: subscription() | '_',
ask = none :: ask() | '_',
groups = [] :: [binary()] | '_',
askmessage = <<"">> :: binary() | '_',
xs = [] :: [xmlel()] | '_'
}).
-record(roster_version,
{
us = {<<>>, <<>>} :: {binary(), binary()},
version = <<>> :: binary()
}).
-type ask() :: none | in | out | both | subscribe | unsubscribe.
-type subscription() :: none | both | from | to | remove.
-158
View File
@@ -1,158 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2015 ProcessOne
%%%
%%% 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 of the
%%% License, 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; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-define(NS_DISCO_ITEMS,
<<"http://jabber.org/protocol/disco#items">>).
-define(NS_DISCO_INFO,
<<"http://jabber.org/protocol/disco#info">>).
-define(NS_VCARD, <<"vcard-temp">>).
-define(NS_VCARD_UPDATE, <<"vcard-temp:x:update">>).
-define(NS_AUTH, <<"jabber:iq:auth">>).
-define(NS_AUTH_ERROR, <<"jabber:iq:auth:error">>).
-define(NS_REGISTER, <<"jabber:iq:register">>).
-define(NS_SEARCH, <<"jabber:iq:search">>).
-define(NS_ROSTER, <<"jabber:iq:roster">>).
-define(NS_ROSTER_VER,
<<"urn:xmpp:features:rosterver">>).
-define(NS_PRIVACY, <<"jabber:iq:privacy">>).
-define(NS_BLOCKING, <<"urn:xmpp:blocking">>).
-define(NS_PRIVATE, <<"jabber:iq:private">>).
-define(NS_VERSION, <<"jabber:iq:version">>).
-define(NS_TIME, <<"urn:xmpp:time">>).
-define(NS_LAST, <<"jabber:iq:last">>).
-define(NS_XDATA, <<"jabber:x:data">>).
-define(NS_IQDATA, <<"jabber:iq:data">>).
-define(NS_DELAY, <<"urn:xmpp:delay">>).
-define(NS_HINTS, <<"urn:xmpp:hints">>).
-define(NS_EXPIRE, <<"jabber:x:expire">>).
-define(NS_EVENT, <<"jabber:x:event">>).
-define(NS_CHATSTATES,
<<"http://jabber.org/protocol/chatstates">>).
-define(NS_XCONFERENCE, <<"jabber:x:conference">>).
-define(NS_STATS,
<<"http://jabber.org/protocol/stats">>).
-define(NS_MUC, <<"http://jabber.org/protocol/muc">>).
-define(NS_MUC_USER,
<<"http://jabber.org/protocol/muc#user">>).
-define(NS_MUC_ADMIN,
<<"http://jabber.org/protocol/muc#admin">>).
-define(NS_MUC_OWNER,
<<"http://jabber.org/protocol/muc#owner">>).
-define(NS_MUC_UNIQUE,
<<"http://jabber.org/protocol/muc#unique">>).
-define(NS_PUBSUB,
<<"http://jabber.org/protocol/pubsub">>).
-define(NS_PUBSUB_EVENT,
<<"http://jabber.org/protocol/pubsub#event">>).
-define(NS_PUBSUB_META_DATA,
<<"http://jabber.org/protocol/pubsub#meta-data">>).
-define(NS_PUBSUB_OWNER,
<<"http://jabber.org/protocol/pubsub#owner">>).
-define(NS_PUBSUB_NMI,
<<"http://jabber.org/protocol/pubsub#node-meta-info">>).
-define(NS_PUBSUB_ERRORS,
<<"http://jabber.org/protocol/pubsub#errors">>).
-define(NS_PUBSUB_NODE_CONFIG,
<<"http://jabber.org/protocol/pubsub#node_config">>).
-define(NS_PUBSUB_SUB_OPTIONS,
<<"http://jabber.org/protocol/pubsub#subscribe_options">>).
-define(NS_PUBSUB_SUBSCRIBE_OPTIONS,
<<"http://jabber.org/protocol/pubsub#subscribe_options">>).
-define(NS_PUBSUB_PUBLISH_OPTIONS,
<<"http://jabber.org/protocol/pubsub#publish_options">>).
-define(NS_PUBSUB_SUB_AUTH,
<<"http://jabber.org/protocol/pubsub#subscribe_authorization">>).
-define(NS_PUBSUB_GET_PENDING,
<<"http://jabber.org/protocol/pubsub#get-pending">>).
-define(NS_COMMANDS,
<<"http://jabber.org/protocol/commands">>).
-define(NS_BYTESTREAMS,
<<"http://jabber.org/protocol/bytestreams">>).
-define(NS_ADMIN,
<<"http://jabber.org/protocol/admin">>).
-define(NS_ADMIN_ANNOUNCE,
<<"http://jabber.org/protocol/admin#announce">>).
-define(NS_ADMIN_ANNOUNCE_ALL,
<<"http://jabber.org/protocol/admin#announce-all">>).
-define(NS_ADMIN_SET_MOTD,
<<"http://jabber.org/protocol/admin#set-motd">>).
-define(NS_ADMIN_EDIT_MOTD,
<<"http://jabber.org/protocol/admin#edit-motd">>).
-define(NS_ADMIN_DELETE_MOTD,
<<"http://jabber.org/protocol/admin#delete-motd">>).
-define(NS_ADMIN_ANNOUNCE_ALLHOSTS,
<<"http://jabber.org/protocol/admin#announce-allhosts">>).
-define(NS_ADMIN_ANNOUNCE_ALL_ALLHOSTS,
<<"http://jabber.org/protocol/admin#announce-all-allhosts">>).
-define(NS_ADMIN_SET_MOTD_ALLHOSTS,
<<"http://jabber.org/protocol/admin#set-motd-allhosts">>).
-define(NS_ADMIN_EDIT_MOTD_ALLHOSTS,
<<"http://jabber.org/protocol/admin#edit-motd-allhosts">>).
-define(NS_ADMIN_DELETE_MOTD_ALLHOSTS,
<<"http://jabber.org/protocol/admin#delete-motd-allhosts">>).
-define(NS_SERVERINFO,
<<"http://jabber.org/network/serverinfo">>).
-define(NS_RSM, <<"http://jabber.org/protocol/rsm">>).
-define(NS_EJABBERD_CONFIG, <<"ejabberd:config">>).
-define(NS_STREAM,
<<"http://etherx.jabber.org/streams">>).
-define(NS_STANZAS,
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>).
-define(NS_STREAMS,
<<"urn:ietf:params:xml:ns:xmpp-streams">>).
-define(NS_TLS, <<"urn:ietf:params:xml:ns:xmpp-tls">>).
-define(NS_SASL,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>).
-define(NS_SESSION,
<<"urn:ietf:params:xml:ns:xmpp-session">>).
-define(NS_BIND,
<<"urn:ietf:params:xml:ns:xmpp-bind">>).
-define(NS_FEATURE_IQAUTH,
<<"http://jabber.org/features/iq-auth">>).
-define(NS_FEATURE_IQREGISTER,
<<"http://jabber.org/features/iq-register">>).
-define(NS_FEATURE_COMPRESS,
<<"http://jabber.org/features/compress">>).
-define(NS_FEATURE_MSGOFFLINE, <<"msgoffline">>).
-define(NS_COMPRESS,
<<"http://jabber.org/protocol/compress">>).
-define(NS_CAPS, <<"http://jabber.org/protocol/caps">>).
-define(NS_SHIM, <<"http://jabber.org/protocol/shim">>).
-define(NS_ADDRESS,
<<"http://jabber.org/protocol/address">>).
-define(NS_OOB, <<"jabber:x:oob">>).
-define(NS_CAPTCHA, <<"urn:xmpp:captcha">>).
-define(NS_MEDIA, <<"urn:xmpp:media-element">>).
-define(NS_BOB, <<"urn:xmpp:bob">>).
-define(NS_MAM_TMP, <<"urn:xmpp:mam:tmp">>).
-define(NS_MAM_0, <<"urn:xmpp:mam:0">>).
-define(NS_MAM_1, <<"urn:xmpp:mam:1">>).
-define(NS_SID_0, <<"urn:xmpp:sid:0">>).
-define(NS_PING, <<"urn:xmpp:ping">>).
-define(NS_CARBONS_2, <<"urn:xmpp:carbons:2">>).
-define(NS_CARBONS_1, <<"urn:xmpp:carbons:1">>).
-define(NS_FORWARD, <<"urn:xmpp:forward:0">>).
-define(NS_CLIENT_STATE, <<"urn:xmpp:csi:0">>).
-define(NS_STREAM_MGMT_2, <<"urn:xmpp:sm:2">>).
-define(NS_STREAM_MGMT_3, <<"urn:xmpp:sm:3">>).
-define(NS_HTTP_UPLOAD, <<"urn:xmpp:http:upload">>).
-define(NS_HTTP_UPLOAD_OLD, <<"eu:siacs:conversations:http:upload">>).
-define(NS_THUMBS_1, <<"urn:xmpp:thumbs:1">>).
-define(NS_NICK, <<"http://jabber.org/protocol/nick">>).
-173
View File
@@ -1,173 +0,0 @@
%%% ====================================================================
%%% ``The contents of this file are subject to the Erlang Public License,
%%% Version 1.1, (the "License"); you may not use this file except in
%%% compliance with the License. You should have received a copy of the
%%% Erlang Public License along with this software. If not, it can be
%%% retrieved via the world wide web at http://www.erlang.org/.
%%%
%%%
%%% Software distributed under the License is distributed on an "AS IS"
%%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%%% the License for the specific language governing rights and limitations
%%% under the License.
%%%
%%%
%%% The Initial Developer of the Original Code is ProcessOne.
%%% Portions created by ProcessOne are Copyright 2006-2015, ProcessOne
%%% All Rights Reserved.''
%%% This software is copyright 2006-2015, ProcessOne.
%%%
%%%
%%% copyright 2006-2015 ProcessOne
%%%
%%% This file contains pubsub types definition.
%%% ====================================================================
-include("ejabberd.hrl").
%% -------------------------------
%% Pubsub constants
-define(ERR_EXTENDED(E, C), mod_pubsub:extended_error(E, C)).
%% The actual limit can be configured with mod_pubsub's option max_items_node
-define(MAXITEMS, 10).
%% this is currently a hard limit.
%% Would be nice to have it configurable.
-define(MAX_PAYLOAD_SIZE, 60000).
%% -------------------------------
%% Pubsub types
-type(hostPubsub() :: binary()).
%% <p><tt>hostPubsub</tt> is the name of the PubSub service. For example, it can be
%% <tt>"pubsub.localhost"</tt>.</p>
-type(hostPEP() :: {binary(), binary(), <<>>}).
%% @type hostPEP() = {User, Server, Resource}
%% User = string()
%% Server = string()
%% Resource = [].
%% <p>For example, it can be :
%% ```{"bob", "example.org", []}'''.</p>
-type(host() :: hostPubsub() | hostPEP()).
%% @type host() = hostPubsub() | hostPEP().
-type(nodeId() :: binary()).
%% @type nodeId() = binary().
%% <p>A node is defined by a list of its ancestors. The last element is the name
%% of the current node. For example:
%% ```<<"/home/localhost/user">>'''</p>
-type(nodeIdx() :: pos_integer() | binary()).
%% @type nodeIdx() = integer() | binary().
%% note: pos_integer() should always be used, but we allow anything else coded
%% as binary, so one can have a custom implementation of nodetree with custom
%% indexing (see nodetree_virtual). this also allows to use any kind of key for
%% indexing nodes, as this can be usefull with external backends such as odbc.
-type(itemId() :: binary()).
%% @type itemId() = string().
-type(subId() :: binary()).
%% @type subId() = string().
-type(nodeOption() ::
{Option::atom(),
Value::atom() | [binary()] | boolean() | non_neg_integer()
}).
-type(nodeOptions() :: [mod_pubsub:nodeOption(),...]).
%% @type nodeOption() = {Option, Value}
%% Option = atom()
%% Value = term().
%% Example:
%% ```{deliver_payloads, true}'''
-type(subOption() ::
{Option::atom(),
Value::binary() | [binary()] | boolean()
}).
-type(subOptions() :: [mod_pubsub:subOption(),...]).
-type(affiliation() :: 'none'
| 'owner'
| 'publisher'
| 'publish_only'
| 'member'
| 'outcast'
).
%% @type affiliation() = 'none' | 'owner' | 'publisher' | 'publish-only' | 'member' | 'outcast'.
-type(subscription() :: 'none'
| 'pending'
| 'unconfigured'
| 'subscribed'
).
%% @type subscription() = 'none' | 'pending' | 'unconfigured' | 'subscribed'.
-type(accessModel() :: 'open'
| 'presence'
| 'roster'
| 'authorize'
| 'whitelist'
).
%% @type accessModel() = 'open' | 'presence' | 'roster' | 'authorize' | 'whitelist'.
-type(publishModel() :: 'publishers'
| 'subscribers'
| 'open'
).
%% @type publishModel() = 'publishers' | 'subscribers' | 'open'
-record(pubsub_index,
{
index :: atom(),
last :: mod_pubsub:nodeIdx(),
free :: [mod_pubsub:nodeIdx()]
}).
-record(pubsub_node,
{
nodeid ,% :: {mod_pubsub:host(), mod_pubsub:nodeId()},
id ,% :: mod_pubsub:nodeIdx(),
parents = [] ,% :: [mod_pubsub:nodeId(),...],
type = <<"flat">>,% :: binary(),
owners = [] ,% :: [jlib:ljid(),...],
options = [] % :: mod_pubsub:nodeOptions()
}).
-record(pubsub_state,
{
stateid ,% :: {jlib:ljid(), mod_pubsub:nodeIdx()},
items = [] ,% :: [mod_pubsub:itemId(),...],
affiliation = 'none',% :: mod_pubsub:affiliation(),
subscriptions = [] % :: [{mod_pubsub:subscription(), mod_pubsub:subId()}]
}).
-record(pubsub_item,
{
itemid ,% :: {mod_pubsub:itemId(), mod_pubsub:nodeIdx()},
creation = {unknown, unknown},% :: {erlang:timestamp(), jlib:ljid()},
modification = {unknown, unknown},% :: {erlang:timestamp(), jlib:ljid()},
payload = [] % :: mod_pubsub:payload()
}).
-record(pubsub_subscription,
{
subid ,% :: mod_pubsub:subId(),
options = [] % :: mod_pubsub:subOptions()
}).
-record(pubsub_last_item,
{
nodeid ,% :: mod_pubsub:nodeIdx(),
itemid ,% :: mod_pubsub:itemId(),
creation ,% :: {erlang:timestamp(), jlib:ljid()},
payload % :: mod_pubsub:payload()
}).
-2
View File
@@ -1,2 +0,0 @@
defmodule Ejabberd do
end
-13
View File
@@ -1,13 +0,0 @@
defmodule Ejabberd.Hooks do
# Generic hook setting features
def add(hook_name, host, module, function, priority) do
:ejabberd_hooks.add(hook_name, host, module, function, priority)
end
# Should be named 'removed'
def delete(hook_name, host, module, function, priority) do
:ejabberd_hooks.delete(hook_name, host, module, function, priority)
end
end
-9
View File
@@ -1,9 +0,0 @@
defmodule Ejabberd.Logger do
def critical(message, args \\ []), do: :lager.log(:critical, [], message, args)
def error(message, args \\ []), do: :lager.log(:error, [], message, args)
def warning(message, args \\ []), do: :lager.log(:warning, [], message, args)
def info(message, args \\ []), do: :lager.log(:info, [], message, args)
def debug(message, args \\ []), do: :lager.log(:debug, [], message, args)
end
-21
View File
@@ -1,21 +0,0 @@
defmodule ModPresenceDemo do
import Ejabberd.Logger # this allow using info, error, etc for logging
@behaviour :gen_mod
def start(host, _opts) do
info('Starting ejabberd module Presence Demo')
Ejabberd.Hooks.add(:set_presence_hook, host, __ENV__.module, :on_presence, 50)
:ok
end
def stop(host) do
info('Stopping ejabberd module Presence Demo')
Ejabberd.Hooks.delete(:set_presence_hook, host, __ENV__.module, :on_presence, 50)
:ok
end
def on_presence(user, _server, _resource, _packet) do
info('Receive presence for #{user}')
:none
end
end
-156
View File
@@ -1,156 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_lib_sqlite3.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_LIB_SQLITE3([MINIMUM-VERSION])
#
# DESCRIPTION
#
# Test for the SQLite 3 library of a particular version (or newer)
#
# This macro takes only one optional argument, required version of SQLite
# 3 library. If required version is not passed, 3.0.0 is used in the test
# of existance of SQLite 3.
#
# If no intallation prefix to the installed SQLite library is given the
# macro searches under /usr, /usr/local, and /opt.
#
# This macro calls:
#
# AC_SUBST(SQLITE3_CFLAGS)
# AC_SUBST(SQLITE3_LDFLAGS)
# AC_SUBST(SQLITE3_VERSION)
#
# And sets:
#
# HAVE_SQLITE3
#
# LICENSE
#
# Copyright (c) 2008 Mateusz Loskot <mateusz@loskot.net>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 14
AC_DEFUN([AX_LIB_SQLITE3],
[
AC_ARG_WITH([sqlite3],
AS_HELP_STRING(
[--with-sqlite3=@<:@ARG@:>@],
[use SQLite 3 library @<:@default=yes@:>@, optionally specify the prefix for sqlite3 library]
),
[
if test "$withval" = "no"; then
WANT_SQLITE3="no"
elif test "$withval" = "yes"; then
WANT_SQLITE3="yes"
ac_sqlite3_path=""
else
WANT_SQLITE3="yes"
ac_sqlite3_path="$withval"
fi
],
[WANT_SQLITE3="yes"]
)
SQLITE3_CFLAGS=""
SQLITE3_LDFLAGS=""
SQLITE3_VERSION=""
if test "x$WANT_SQLITE3" = "xyes"; then
ac_sqlite3_header="sqlite3.h"
sqlite3_version_req=ifelse([$1], [], [3.0.0], [$1])
sqlite3_version_req_shorten=`expr $sqlite3_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
sqlite3_version_req_major=`expr $sqlite3_version_req : '\([[0-9]]*\)'`
sqlite3_version_req_minor=`expr $sqlite3_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
sqlite3_version_req_micro=`expr $sqlite3_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
if test "x$sqlite3_version_req_micro" = "x" ; then
sqlite3_version_req_micro="0"
fi
sqlite3_version_req_number=`expr $sqlite3_version_req_major \* 1000000 \
\+ $sqlite3_version_req_minor \* 1000 \
\+ $sqlite3_version_req_micro`
AC_MSG_CHECKING([for SQLite3 library >= $sqlite3_version_req])
if test "$ac_sqlite3_path" != ""; then
ac_sqlite3_ldflags="-L$ac_sqlite3_path/lib"
ac_sqlite3_cppflags="-I$ac_sqlite3_path/include"
else
for ac_sqlite3_path_tmp in /usr /usr/local /opt ; do
if test -f "$ac_sqlite3_path_tmp/include/$ac_sqlite3_header" \
&& test -r "$ac_sqlite3_path_tmp/include/$ac_sqlite3_header"; then
ac_sqlite3_path=$ac_sqlite3_path_tmp
ac_sqlite3_cppflags="-I$ac_sqlite3_path_tmp/include"
ac_sqlite3_ldflags="-L$ac_sqlite3_path_tmp/lib"
break;
fi
done
fi
ac_sqlite3_ldflags="$ac_sqlite3_ldflags -lsqlite3"
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ac_sqlite3_cppflags"
AC_LANG_PUSH(C)
AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM([[@%:@include <sqlite3.h>]],
[[
#if (SQLITE_VERSION_NUMBER >= $sqlite3_version_req_number)
/* Everything is okay */
#else
# error SQLite version is too old
#endif
]]
)
],
[
AC_MSG_RESULT([yes])
success="yes"
],
[
AC_MSG_RESULT([not found])
success="no"
]
)
AC_LANG_POP(C)
CPPFLAGS="$saved_CPPFLAGS"
if test "$success" = "yes"; then
SQLITE3_CFLAGS="$ac_sqlite3_cppflags"
SQLITE3_LDFLAGS="$ac_sqlite3_ldflags"
ac_sqlite3_header_path="$ac_sqlite3_path/include/$ac_sqlite3_header"
dnl Retrieve SQLite release version
if test "x$ac_sqlite3_header_path" != "x"; then
ac_sqlite3_version=`cat $ac_sqlite3_header_path \
| grep '#define.*SQLITE_VERSION.*\"' | sed -e 's/.* "//' \
| sed -e 's/"//'`
if test $ac_sqlite3_version != ""; then
SQLITE3_VERSION=$ac_sqlite3_version
else
AC_MSG_WARN([Cannot find SQLITE_VERSION macro in sqlite3.h header to retrieve SQLite version!])
fi
fi
AC_SUBST(SQLITE3_CFLAGS)
AC_SUBST(SQLITE3_LDFLAGS)
AC_SUBST(SQLITE3_VERSION)
AC_DEFINE([HAVE_SQLITE3], [], [Have the SQLITE3 library])
fi
fi
])
-103
View File
@@ -1,103 +0,0 @@
dnl erlang-extra.m4
AC_DEFUN([ERLANG_SUBST_LIB_VER],
[AC_ERLANG_CHECK_LIB([$1])
ERLANG_LIB_VER_SUBST="$ERLANG_LIB_VER_SUBST -e 's,[@]ERLANG_LIB_VER_$1[@],\$(ERLANG_LIB_VER_$1),g'"
AC_SUBST([ERLANG_LIB_VER_SUBST])
]) # ERLANG_SUBST_LIB_VER
AC_DEFUN([ERLANG_VERSION_CHECK],
[ AC_MSG_CHECKING([Erlang/OTP version])
cat > conftest.erl <<EOF
-module(conftest).
-export([[start/0]]).
start() ->
ERTS = erlang:system_info(version),
RequiredMin = "$1",
RequiredMax = "$2",
Status =
case {string:tokens(RequiredMin, " "),
string:tokens(RequiredMax, " ")} of
{[[MinStr | _]], [[MaxStr | _]]} ->
case check(ERTS, {MinStr, MaxStr}) of
less ->
list_to_binary([[ERTS, " found, ", RequiredMin, " required"]]);
greater ->
list_to_binary([[ERTS, " found, ", RequiredMax, " or earlier required"]]);
ok ->
<<"ok">>
end;
_ ->
list_to_binary([[ERTS, " found, ", RequiredMin, " required"]])
end,
file:write_file("conftest.out", Status),
halt().
check(CurStr, {MinStr, MaxStr}) ->
Cur = parse(CurStr),
Min = parse(MinStr),
Max = parse(MaxStr),
case {less_or_equal(Min, Cur), less_or_equal(Cur, Max)} of
{false, true} -> less;
{true, true} -> ok;
{true, false} -> greater
end.
parse(Version) ->
lists:map(fun(A) -> {Int,[[]]} = string:to_integer(A), Int end,
string:tokens(Version, ".")).
less_or_equal([[]], [[]]) ->
true;
less_or_equal([[]], _Any) ->
true;
less_or_equal(_Any, [[]]) ->
false;
less_or_equal([[Left| Rl]], [[Right| Rr]]) ->
case {Left < Right, Left == Right} of
{true, _} ->
true;
{false, false} ->
false;
{false, true} ->
less_or_equal(Rl, Rr)
end.
EOF
$ERLC conftest.erl || AC_MSG_ERROR(["Could not compile Erlang/OTP version check program using '$ERLC'"])
if ! $ERL -s conftest -noshell -o ! -f conftest.out ; then
AC_MSG_ERROR(["Could not run Erlang/OTP version check program using '$ERL'"])
fi
if test "x`cat conftest.out`" != "xok"; then
AC_MSG_RESULT([failed])
X="`cat conftest.out`"
if test "[$3]" == "warn"; then
AC_MSG_WARN([$X])
else
AC_MSG_FAILURE([$X])
fi
else
AC_MSG_RESULT([ok])
fi
]) dnl ERLANG_VERSION_CHECK
AC_DEFUN([ERLANG_DEPRECATED_TYPES_CHECK],
[ AC_MSG_CHECKING([whether Erlang is using deprecated types])
cat > conftest.erl <<EOF
-module(conftest).
-record(state, {host = dict:new() :: dict:dict()}).
EOF
if $ERLC conftest.erl > /dev/null 2>&1; then
AC_MSG_RESULT([no])
AC_SUBST(erlang_deprecated_types, false)
else
AC_MSG_RESULT([yes])
AC_SUBST(erlang_deprecated_types, true)
fi
])
-90
View File
@@ -1,90 +0,0 @@
defmodule Ejabberd.Mixfile do
use Mix.Project
def project do
[app: :ejabberd,
version: "15.09.0",
elixir: "~> 1.0",
elixirc_paths: ["lib"],
compile_path: ".",
compilers: [:asn1] ++ Mix.compilers,
erlc_options: erlc_options,
erlc_paths: ["asn1", "src"],
package: package,
deps: deps]
end
def application do
[mod: {:ejabberd_app, []},
applications: [:ssl],
included_applications: [:p1_logger, :p1_yaml, :p1_tls, :p1_xml,
:p1_stringprep, :p1_zlib, :p1_cache_tab,
:mnesia, :p1_utils, :p1_iconv, :esip, :p1_stun,
:p1_mysql, :p1_pgsql, :eredis, :oauth2, :xmlrpc]]
end
defp erlc_options do
# Use our own includes + includes from all dependencies
includes = ["include"] ++ Path.wildcard(Path.join("..", "/*/include"))
[:debug_info] ++ Enum.map(includes, fn(path) -> {:i, path} end)
end
defp deps do
[{:p1_xml, git: "https://github.com/processone/xml"},
{:p1_logger, git: "https://github.com/processone/p1_logger"},
{:p1_yaml, git: "https://github.com/processone/p1_yaml"},
{:p1_tls, git: "https://github.com/processone/tls"},
{:p1_stringprep, git: "https://github.com/processone/stringprep"},
{:p1_zlib, git: "https://github.com/processone/zlib"},
{:p1_cache_tab, git: "https://github.com/processone/cache_tab"},
{:p1_utils, git: "https://github.com/processone/p1_utils"},
{:p1_iconv, git: "https://github.com/processone/eiconv"},
{:esip, git: "https://github.com/processone/p1_sip"},
{:p1_stun, git: "https://github.com/processone/stun"},
{:p1_mysql, git: "https://github.com/processone/mysql"},
{:p1_pgsql, git: "https://github.com/processone/pgsql"},
{:eredis, git: "https://github.com/wooga/eredis"},
{:oauth2, git: "https://github.com/prefiks/oauth2.git"},
{:xmlrpc, git: "https://github.com/rds13/xmlrpc.git"},
{:exrm, "~> 0.19.2"}]
end
defp package do
[licenses: ["GPLv2"],
links: %{"Site" => "https://www.ejabberd.im",
"Documentation" => "http://docs.ejabberd.im",
"Source" => "https://github.com/processone/ejabberd"}]
end
end
defmodule Mix.Tasks.Compile.Asn1 do
use Mix.Task
alias Mix.Compilers.Erlang
@recursive true
@manifest ".compile.asn1"
def run(args) do
{opts, _, _} = OptionParser.parse(args, switches: [force: :boolean])
project = Mix.Project.config
source_paths = project[:asn1_paths] || ["asn1"]
dest_paths = project[:asn1_target] || ["src"]
mappings = Enum.zip(source_paths, dest_paths)
options = project[:asn1_options] || []
Erlang.compile(manifest(), mappings, :asn1, :erl, opts[:force], fn
input, output ->
options = options ++ [:noobj, outdir: Erlang.to_erl_file(Path.dirname(output))]
case :asn1ct.compile(Erlang.to_erl_file(input), options) do
:ok -> {:ok, :done}
error -> error
end
end)
end
def manifests, do: [manifest]
defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
def clean, do: Erlang.clean(manifest())
end
-24
View File
@@ -1,24 +0,0 @@
%{"bbmustache": {:hex, :bbmustache, "1.0.3"},
"conform": {:hex, :conform, "0.17.0"},
"eredis": {:git, "https://github.com/wooga/eredis", "bf12ecb30253c84a2331f4f0d93fd68856fcb9f4", []},
"erlware_commons": {:hex, :erlware_commons, "0.15.0"},
"esip": {:git, "https://github.com/processone/p1_sip", "d662d3fe7f6288b444ea321d854de0bd6d40e022", []},
"exrm": {:hex, :exrm, "0.19.9"},
"getopt": {:hex, :getopt, "0.8.2"},
"neotoma": {:hex, :neotoma, "1.7.3"},
"oauth2": {:git, "https://github.com/prefiks/oauth2.git", "e6da9912e5d8f658e7e868f41a102d085bdbef59", []},
"p1_cache_tab": {:git, "https://github.com/processone/cache_tab", "f7ea12b0ba962a3d2f9a406d2954cf7de4e27230", []},
"p1_iconv": {:git, "https://github.com/processone/eiconv", "8b7542b1aaf0a851f335e464956956985af6d9a2", []},
"p1_logger": {:git, "https://github.com/processone/p1_logger", "3e19507fd5606a73694917158767ecb3f5704e3f", []},
"p1_mysql": {:git, "https://github.com/processone/mysql", "dfa87da95f8fdb92e270741c2a53f796b682f918", []},
"p1_pgsql": {:git, "https://github.com/processone/pgsql", "e72c03c60bfcb56bbb5d259342021d9cb3581dac", []},
"p1_stringprep": {:git, "https://github.com/processone/stringprep", "3c640237a3a7831dc39de6a6d329d3a9af25c579", []},
"p1_stun": {:git, "https://github.com/processone/stun", "061bdae484268cbf0457ad4797e74b8516df3ad1", []},
"p1_tls": {:git, "https://github.com/processone/tls", "e56321afd974e9da33da913cd31beebc8e73e75f", []},
"p1_utils": {:git, "https://github.com/processone/p1_utils", "7aa022f995e3be006224a25405cd431483e7d026", []},
"p1_xml": {:git, "https://github.com/processone/xml", "403066ea5e0b2cd89e65c3ed1a329789c02c3588", []},
"p1_yaml": {:git, "https://github.com/processone/p1_yaml", "79f756ba73a235c4d3836ec07b5f7f2b55f49638", []},
"p1_zlib": {:git, "https://github.com/processone/zlib", "e3d4222b7aae616d7ef2e7e2fa0bbf451516c602", []},
"providers": {:hex, :providers, "1.4.1"},
"relx": {:hex, :relx, "3.5.0"},
"xmlrpc": {:git, "https://github.com/rds13/xmlrpc.git", "42e6e96a0fe7106830274feed915125feb1056f3", []}}
-1867
View File
File diff suppressed because it is too large Load Diff
-1838
View File
File diff suppressed because it is too large Load Diff
-1878
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-1891
View File
File diff suppressed because it is too large Load Diff
-1859
View File
File diff suppressed because it is too large Load Diff
-1854
View File
File diff suppressed because it is too large Load Diff
-1870
View File
File diff suppressed because it is too large Load Diff
-1859
View File
File diff suppressed because it is too large Load Diff
-393
View File
@@ -1,393 +0,0 @@
%% -*- coding: latin-1 -*-
{"Access Configuration","תצורת גישה"}.
{"Access Control List Configuration","תצורת רשימת בקרת גישה"}.
{"Access control lists","רשימות בקרת גישה"}.
{"Access Control Lists","רשימות בקרת גישה"}.
{"Access rules","כללי גישה"}.
{"Access Rules","כללי גישה"}.
{"Action on user","פעולה על משתמש"}.
{"Add Jabber ID","הוסף JID"}.
{"Add New","הוסף חדש"}.
{"Add User","הוסף משתמש"}.
{"Administration of ","ניהול של "}.
{"Administration","הנהלה"}.
{"A friendly name for the node","שם ידידותי עבור הצומת"}.
{"All activity","כל פעילות"}.
{"Allow this Jabber ID to subscribe to this pubsub node?","להתיר לכתובת JID זו להירשם לצומת PubSub זה?"}.
{"Allow users to change the subject","התר למשתמשים לשנות את הנושא"}.
{"Allow users to query other users","התר למשתמשים לתשאל משתמשים אחרים"}.
{"Allow users to send invites","התר למשתמשים לשלוח הזמנות"}.
{"Allow users to send private messages","התר למשתמשים לשלוח הודעות פרטיות"}.
{"Allow visitors to change nickname","התר למבקרים לשנות שם כינוי"}.
{"Allow visitors to send private messages to","התר למבקרים לשלוח הודעות פרטיות אל"}.
{"Allow visitors to send status text in presence updates","התר למבקרים לשלוח טקסט מצב בעדכוני נוכחות"}.
{"Allow visitors to send voice requests","התר למבקרים לשלוח בקשות ביטוי"}.
{"All Users","כל המשתמשים"}.
{"Announcements","בשורות"}.
{"anyone","לכל אחד"}.
{"April","אפריל"}.
{"August","אוגוסט"}.
{"Backup Management","ניהול גיבוי"}.
{"Backup of ~p","גיבוי של ~p"}.
{"Backup to File at ","גבה לקובץ אצל "}.
{"Backup","גיבוי"}.
{"Bad format","פורמט רע"}.
{"Birthday","יום הולדת"}.
{"CAPTCHA web page","עמוד רשת CAPTCHA"}.
{"Change Password","שנה סיסמה"}.
{"Change User Password","שנה סיסמת משתמש"}.
{"Characters not allowed:","תווים לא מורשים:"}.
{"Chatroom configuration modified","תצורת חדר שיחה שונתה"}.
{"Chatroom is created","חדר שיחה הינו נוצר"}.
{"Chatroom is destroyed","חדר שיחה הינו הרוס"}.
{"Chatroom is started","חדר שיחה הינו מותחל"}.
{"Chatroom is stopped","חדר שיחה הינו מופסק"}.
{"Chatrooms","חדרי שיחה"}.
{"Choose a username and password to register with this server","בחר שם משתמש וסיסמה להירשם עם שרת זה"}.
{"Choose modules to stop","בחר מודולים להפסקה"}.
{"Choose storage type of tables","בחר טיפוס אחסון של טבלאות"}.
{"Choose whether to approve this entity's subscription.","בחר האם לאשר את המנוי של ישות זו."}.
{"City","עיר"}.
{"Commands","פקודות"}.
{"Configuration of room ~s","תצורת חדר ~s"}.
{"Configuration","תצורה"}.
{"Connected Resources:","משאבים מחוברים:"}.
{"Connections parameters","פרמטרים של חיבור"}.
{"Country","ארץ"}.
{"CPU Time:","זמן מחשב (CPU):"}.
{"Database Tables at ~p","טבלאות מסד נתונים אצל ~p"}.
{"Database Tables Configuration at ","תצורת טבלאות מסד נתונים אצל "}.
{"Database","מסד נתונים"}.
{"December","דצמבר"}.
{"Default users as participants","משתמשים משתמטים כמשתתפים"}.
{"Delete message of the day on all hosts","מחק את בשורת היום בכל המארחים"}.
{"Delete message of the day","מחק את בשורת היום"}.
{"Delete Selected","מחק נבחרות"}.
{"Delete User","מחק משתמש"}.
{"Deliver event notifications","מסירת התראות אירוע"}.
{"Deliver payloads with event notifications","מסירת מטעני ייעוד (מטע״ד) יחד עם התראות אירוע"}.
{"Description:","תיאור:"}.
{"Disc only copy","העתק של תקליטור בלבד"}.
{"Displayed Groups:","קבוצות מוצגות:"}.
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","אל תגלה את הסיסמה שלך לאף אחד, אפילו לא למנהלים של שרת Jabber."}.
{"Dump Backup to Text File at ","השלך גיבוי לקובץ טקסט אצל "}.
{"Dump to Text File","השלך לקובץ טקסט"}.
{"Edit Properties","ערוך מאפיינים"}.
{"Either approve or decline the voice request.","או שתאשר או שתדחה את בקשת הביטוי."}.
{"ejabberd IRC module","מודול IRC של ejabberd"}.
{"ejabberd MUC module","מודול MUC של ejabberd"}.
{"ejabberd Multicast service","שירות שידור מרובב של ejabberd"}.
{"ejabberd Publish-Subscribe module","מודול Publish-Subscribe של ejabberd"}.
{"ejabberd SOCKS5 Bytestreams module","מודול SOCKS5 Bytestreams של ejabberd"}.
{"ejabberd vCard module","מודול vCard של ejabberd"}.
{"ejabberd Web Admin","מנהל רשת ejabberd"}.
{"Elements","אלמנטים"}.
{"Email","דוא״ל"}.
{"Enable logging","אפשר רישום פעילות"}.
{"Enable message archiving","אפשר אחסון הודעות"}.
{"Encoding for server ~b","קידוד עבור שרת ~b"}.
{"End User Session","סיים סשן משתמש"}.
{"Enter list of {Module, [Options]}","הזן רשימה של {מודול, [אפשרויות]}"}.
{"Enter nickname you want to register","הזן שם כינוי אשר ברצונך לרושמו"}.
{"Enter path to backup file","הזן נתיב לקובץ גיבוי"}.
{"Enter path to jabberd14 spool dir","הזן נתיב למדור סליל (spool dir) של jabberd14"}.
{"Enter path to jabberd14 spool file","הזן נתיב לקובץ סליל (spool file) של jabberd14"}.
{"Enter path to text file","הזן נתיב לקובץ טקסט"}.
{"Enter the text you see","הזן את הטקסט אותו הינך רואה"}.
{"Enter username and encodings you wish to use for connecting to IRC servers. Press 'Next' to get more fields to fill in. Press 'Complete' to save settings.","הזן שם משתמש וקידודים בהם ברצונך להשתמש לצורך התחברות לשרתי IRC. לחץ 'הבא' כדי להשיג עוד שדות למילוי. לחץ 'סיים' כדי לשמור הגדרות."}.
{"Enter username, encodings, ports and passwords you wish to use for connecting to IRC servers","הזן שם משתמש, קידודים, פורטים וסיסמאות בהם ברצונך להשתמש לצורך התחברות לשרתי IRC"}.
{"Erlang Jabber Server","שרת ג׳אבּר Erlang"}.
{"Error","שגיאה"}.
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","דוגמא: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
{"Exclude Jabber IDs from CAPTCHA challenge","הוצא כתובות של Jabber מתוך אתגר CAPTCHA"}.
{"Export all tables as SQL queries to a file:","יצא את כל טבלאות בתור שאילתות SQL לתוך קובץ:"}.
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","יצא מידע של כל המשתמשים שבתוך בשרת זה לתוך קבצי PIEFXIS (XEP-0227):"}.
{"Export data of users in a host to PIEFXIS files (XEP-0227):","יצא מידע של כל המשתמשים שבתוך מארח לתוך קבצי PIEFXIS (XEP-0227):"}.
{"Family Name","שם משפחה"}.
{"February","פברואר"}.
{"Fill in fields to search for any matching Jabber User","מלא את שדות אלו כדי לחפש עבור כל משתמש Jabber מבוקש"}.
{"Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)","מלא את התבניות כדי לחפש עבור כל משתמש Jabber מבוקש (באפשרותך להוסיף * בסוף שדה כדי להתאים למחרוזת-משנה)"}.
{"Friday","יום שישי"}.
{"From ~s","מאת ~s"}.
{"From","מאת"}.
{"Full Name","שם מלא"}.
{"Get Number of Online Users","השג מספר של משתמשים מקוונים"}.
{"Get Number of Registered Users","השג מספר של משתמשים רשומים"}.
{"Get User Last Login Time","השג זמן כניסה אחרון של משתמש"}.
{"Get User Password","השג סיסמת משתמש"}.
{"Get User Statistics","השג סטטיסטיקת משתמש"}.
{"Grant voice to this person?","להעניק ביטוי לאישיות זו?"}.
{"Groups","קבוצות"}.
{"Group ","קבוצה "}.
{"has been banned","נאסר/ה"}.
{"has been kicked because of an affiliation change","נבעט/ה משום שינוי סינוף"}.
{"has been kicked because of a system shutdown","נבעט/ה משום כיבוי מערכת"}.
{"has been kicked because the room has been changed to members-only","נבעט/ה משום שהחדר שונה אל חברים-בלבד"}.
{"has been kicked","נבעט/ה"}.
{" has set the subject to: "," הגדיר/ה את הנושא אל: "}.
{"Host","מארח"}.
{"If you don't see the CAPTCHA image here, visit the web page.","במידה ואינך רואה תמונת CAPTCHA כאן, בקר בעמוד הרשת."}.
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","אם ברצונך לציין פורטים, סיסמאות, קידודים אחרים עבור שרתים של IRC, מלא את רשימה זו עם ערכים בפורמט '{\"irc server\", \"encoding\", port, \"password\"}'. באופן משתמט שירות זה משתמש בקידוד \"~s\", פורט ~p, סיסמה ריקה."}.
{"Import Directory","ייבוא מדור"}.
{"Import File","ייבוא קובץ"}.
{"Import user data from jabberd14 spool file:","יבא נתוני משתמש מתוך קובץ סליל (spool file) של jabberd14:"}.
{"Import User from File at ","ייבוא משתמש מתוך קובץ אצל "}.
{"Import users data from a PIEFXIS file (XEP-0227):","יבא מידע משתמשים מתוך קובץ PIEFXIS (XEP-0227):"}.
{"Import users data from jabberd14 spool directory:","יבא נתוני משתמשים מתוך מדור סליל (spool directory) של jabberd14:"}.
{"Import Users from Dir at ","ייבוא משתמשים מתוך מדור אצל "}.
{"Import Users From jabberd14 Spool Files","יבא משתמשים מתוך קבצי סליל (Spool Files) של jabberd14"}.
{"Invalid affiliation: ~s","סינוף שגוי: ~s"}.
{"Invalid role: ~s","תפקיד שגוי: ~s"}.
{"IP addresses","כתובות IP"}.
{"IP","IP"}.
{"IRC channel (don't put the first #)","ערוץ IRC (אל תשים סימן # ראשון)"}.
{"IRC server","שרת IRC"}.
{"IRC settings","הגדרות IRC"}.
{"IRC Transport","מוביל IRC"}.
{"IRC username","שם משתמש IRC"}.
{"IRC Username","שם משתמש IRC"}.
{"is now known as","ידועה כעת בכינוי"}.
{"Jabber Account Registration","רישום חשבון Jabber"}.
{"Jabber ID ~s is invalid","מזהה Jabber ~s הינו שגוי"}.
{"Jabber ID","מזהה Jabber"}.
{"January","ינואר"}.
{"Join IRC channel","הצטרף לערוץ IRC"}.
{"joins the room","נכנס/ת אל החדר"}.
{"Join the IRC channel here.","הצטרף לערוץ IRC כאן."}.
{"Join the IRC channel in this Jabber ID: ~s","הצטרף לערוץ IRC במזהה Jabber זה: ~s"}.
{"July","יולי"}.
{"June","יוני"}.
{"Last Activity","פעילות אחרונה"}.
{"Last login","כניסה אחרונה"}.
{"Last month","חודש אחרון"}.
{"Last year","שנה אחרונה"}.
{"leaves the room","עוזב/ת את החדר"}.
{"Listened Ports at ","פורטים מואזנים אצל "}.
{"Listened Ports","פורטים מואזנים"}.
{"List of modules to start","רשימה של מודולים להפעלה"}.
{"List of rooms","רשימה של חדרים"}.
{"Low level update script","תסריט עדכון Low level"}.
{"Make participants list public","הפוך רשימת משתתפים אל פומבית"}.
{"Make room CAPTCHA protected","הפוך חדר אל מוגן CAPTCHA"}.
{"Make room members-only","הפוך חדר אל חברים-בלבד"}.
{"Make room moderated","הפוך חדר אל מבוקר"}.
{"Make room password protected","הפוך חדר אל מוגן במילת מעבר"}.
{"Make room persistent","הפוך חדר אל קבוע"}.
{"Make room public searchable","הפוך חדר אל בר חיפוש פומבי"}.
{"March","מרץ"}.
{"Maximum Number of Occupants","מספר מרבי של נוכחים"}.
{"Max # of items to persist","מספר מרבי של פריטים לקיבוע"}.
{"Max payload size in bytes","גודל מרבי של מטען ייעוד (payload) ביחידות מידה של byte"}.
{"May","מאי"}.
{"Members:","חברים:"}.
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","שנן את הסיסמה שלך, או רשום אותה בנייר שמור במקום בטוח. אצל Jabber אין דרך אוטומטית לשחזר את הסיסמה שלך במידה וזו תישמט מתוך זיכרונך."}.
{"Memory","זיכרון"}.
{"Message body","גוף הודעה"}.
{"Middle Name","שם אמצעי"}.
{"Minimum interval between voice requests (in seconds)","תדירות מינימלית בין בקשות ביטוי (בשניות)"}.
{"moderators only","לאחראים בלבד"}.
{"Modified modules","מודולים שהותאמו"}.
{"Modules at ~p","מודולים אצל ~p"}.
{"Modules","מודולים"}.
{"Module","מודול"}.
{"Monday","יום שני"}.
{"Multicast","שידור מרובב"}.
{"Multi-User Chat","שיחה מרובת משתמשים"}.
{"Name:","שם:"}.
{"Name","שם"}.
{"Never","אף פעם"}.
{"New Password:","סיסמה חדשה:"}.
{"Nickname Registration at ","רישום שם כינוי אצל "}.
{"Nickname ~s does not exist in the room","שם כינוי ~s לא קיים בחדר"}.
{"Nickname","שם כינוי"}.
{"No body provided for announce message","לא סופק גוף עבור הודעת בשורה"}.
{"nobody","אף אחד"}.
{"No Data","אין מידע"}.
{"Node ID","מזהה צומת (NID)"}.
{"Node not found","צומת לא נמצא"}.
{"Node ~p","צומת ~p"}.
{"Nodes","צמתים"}.
{"No limit","ללא הגבלה"}.
{"None","אין"}.
{"No resource provided","לא סופק משאב"}.
{"Not Found","לא נמצא"}.
{"Notify subscribers when items are removed from the node","הודע מנויים כאשר פריטים מוסרים מתוך הצומת"}.
{"Notify subscribers when the node configuration changes","הודע מנויים כאשר תצורת הצומת משתנה"}.
{"Notify subscribers when the node is deleted","הודע מנויים כאשר הצומת נמחק"}.
{"November","נובמבר"}.
{"Number of occupants","מספר של נוכחים"}.
{"Number of online users","מספר של משתמשים מקוונים"}.
{"Number of registered users","מספר של משתמשים רשומים"}.
{"October","אוקטובר"}.
{"Offline Messages:","הודעות לא מקוונות:"}.
{"Offline Messages","הודעות לא מקוונות"}.
{"OK","אישור"}.
{"Old Password:","סיסמה ישנה:"}.
{"Online Users:","משתמשים מקוונים:"}.
{"Online Users","משתמשים מקוונים"}.
{"Online","מקוון"}.
{"Only deliver notifications to available users","מסור התראות למשתמשים זמינים בלבד"}.
{"Only moderators and participants are allowed to change the subject in this room","רק אחראים ומשתתפים רשאים לשנות את הנושא בחדר זה"}.
{"Only moderators are allowed to change the subject in this room","רק אחראים רשאים לשנות את הנושא בחדר זה"}.
{"Options","אפשרויות"}.
{"Organization Name","שם ארגון"}.
{"Organization Unit","יחידת איגוד"}.
{"Outgoing s2s Connections:","חיבורי s2s יוצאים:"}.
{"Outgoing s2s Connections","חיבורי s2s יוצאים"}.
{"Outgoing s2s Servers:","שרתי s2s יוצאים:"}.
{"Packet","חבילת מידע"}.
{"Password ~b","סיסמה ~b"}.
{"Password Verification:","אימות סיסמה:"}.
{"Password Verification","אימות סיסמה"}.
{"Password:","סיסמה:"}.
{"Password","סיסמה"}.
{"Path to Dir","נתיב למדור"}.
{"Path to File","נתיב לקובץ"}.
{"Pending","ממתינות"}.
{"Period: ","משך זמן: "}.
{"Permanent rooms","חדרים קבועים"}.
{"Persist items to storage","פריטים קבועים לאחסון"}.
{"Ping","פינג"}.
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","אנא שים לב כי אפשרויות אלו יגבו את מסד הנתונים המובנה Mnesia בלבד. אם הינך עושה שימוש במודול ODBC, עליך גם לגבות את מסד הנתונים SQL אשר מצוי ברשותך בנפרד."}.
{"Pong","פונג"}.
{"Port ~b","פורט ~b"}.
{"Port","פורט"}.
{"Present real Jabber IDs to","הצג כתובות JID ממשיות"}.
{"private, ","פרטי, "}.
{"Protocol","פרוטוקול"}.
{"Publish-Subscribe","Publish-Subscribe"}.
{"PubSub subscriber request","בקשת מנוי PubSub"}.
{"Purge all items when the relevant publisher goes offline","טיהור כל הפריטים כאשר המפרסם הרלוונטי "}.
{"RAM and disc copy","העתק RAM וגם תקליטור"}.
{"RAM copy","העתק RAM"}.
{"Raw","גולמי"}.
{"Really delete message of the day?","באמת למחוק את בשורת היום?"}.
{"Register a Jabber account","רשום חשבון Jabber"}.
{"Registered nicknames","שמות כינוי רשומים"}.
{"Registered Users:","משתמשים רשומים:"}.
{"Registered Users","משתמשים רשומים"}.
{"Register","הרשם"}.
{"Registration in mod_irc for ","רישום בתוך mod_irc עבור "}.
{"Remote copy","העתק מרוחק"}.
{"Remove All Offline Messages","הסר את כל ההודעות הלא מקוונות"}.
{"Remove User","הסר משתמש"}.
{"Remove","הסר"}.
{"Replaced by new connection","הוחלף בחיבור חדש"}.
{"Resources","משאבים"}.
{"Restart Service","אתחל שירות"}.
{"Restart","אתחל"}.
{"Restore Backup from File at ","שחזר גיבוי מתוך קובץ אצל "}.
{"Restore binary backup after next ejabberd restart (requires less memory):","שחזר גיבוי בינארי לאחר האתחול הבא של ejabberd (מצריך פחות זיכרון):"}.
{"Restore binary backup immediately:","שחזר גיבוי בינארי לאלתר:"}.
{"Restore plain text backup immediately:","שחזר גיבוי טקסט גלוי (plain text) לאלתר:"}.
{"Restore","שחזר"}.
{"Room Configuration","תצורת חדר"}.
{"Room description","תיאור חדר"}.
{"Room Occupants","נוכחי חדר"}.
{"Room title","כותרת חדר"}.
{"Roster groups allowed to subscribe","קבוצות רשימה מורשות להירשם"}.
{"Roster of ","רשימה של "}.
{"Roster size","גודל רשימה"}.
{"Roster","רשימה"}.
{"RPC Call Error","שגיאת קריאת RPC"}.
{"Running Nodes","צמתים מורצים"}.
{"~s access rule configuration","~s תצורת כללי גישה"}.
{"Saturday","יום שבת"}.
{"Script check","בדיקת תסריט"}.
{"Search Results for ","תוצאות חיפוש עבור "}.
{"Search users in ","חיפוש משתמשים אצל "}.
{"Send announcement to all online users on all hosts","שלח בשורה לכל המשתמשים המקוונים בכל המארחים"}.
{"Send announcement to all online users","שלח בשורה לכל המשתמשים המקוונים"}.
{"Send announcement to all users on all hosts","שלח בשורה לכל המשתמשים בכל המארחים"}.
{"Send announcement to all users","שלח בשורה לכל המשתמשים"}.
{"September","ספטמבר"}.
{"Server ~b","שרת ~b"}.
{"Server:","שרת:"}.
{"Set message of the day and send to online users","קבע את בשורת היום ושלח למשתמשים מקוונים"}.
{"Set message of the day on all hosts and send to online users","קבע את בשורת היום בכל המארחים ושלח למשתמשים מקוונים"}.
{"Shared Roster Groups","קבוצות רשימה משותפות"}.
{"Show Integral Table","הצג טבלה אינטגרלית"}.
{"Show Ordinary Table","הצג טבלה רגילה"}.
{"Shut Down Service","כבה שירות"}.
{"~s invites you to the room ~s","~s מזמינך לחדר ~s"}.
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","לקוחות Jabber מסוימים יכולים לאחסן את הסיסמה שלך על המחשב שלך. השתמש בתכונה זו רק אם אתה סמוך כי המחשב שלך הינו מוגן."}.
{"Specify the access model","ציין את מודל הגישה"}.
{"Specify the event message type","ציין את טיפוס הודעת האירוע"}.
{"Specify the publisher model","ציין את מודל הפרסום"}.
{"~s's Offline Messages Queue","תור הודעות לא מקוונות של ~s"}.
{"Start Modules at ","התחל מודולים אצל "}.
{"Start Modules","התחל מודולים"}.
{"Start","התחל"}.
{"Statistics of ~p","סטטיסטיקות של ~p"}.
{"Statistics","סטטיסטיקה"}.
{"Stop Modules at ","הפסק מודולים אצל "}.
{"Stop Modules","הפסק מודולים"}.
{"Stopped Nodes","צמתים שנפסקו"}.
{"Stop","הפסק"}.
{"Storage Type","טיפוס אחסון"}.
{"Store binary backup:","אחסן גיבוי בינארי:"}.
{"Store plain text backup:","אחסן גיבוי טקסט גלוי (plain text):"}.
{"Subject","נושא"}.
{"Submitted","נשלח"}.
{"Submit","שלח"}.
{"Subscriber Address","כתובת מנוי"}.
{"Subscription","הרשמה"}.
{"Sunday","יום ראשון"}.
{"The CAPTCHA is valid.","CAPTCHA הינה בתוקף."}.
{"The collections with which a node is affiliated","האוספים עמם צומת מסונף"}.
{"the password is","הסיסמה היא"}.
{"The password of your Jabber account was successfully changed.","סיסמת חשבון Jabber שונתה בהצלחה."}.
{"There was an error changing the password: ","אירעה שגיאה בשינוי הסיסמה: "}.
{"There was an error creating the account: ","אירעה שגיאה ביצירת החשבון: "}.
{"There was an error deleting the account: ","אירעה שגיאה במחיקת החשבון: "}.
{"This IP address is blacklisted in ~s","כתובת IP זו רשומה ברשימה שחורה בתוך ~s"}.
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","חלק זה אינו ער לרישיות: macbeth הינה זהה כשם MacBeth וגם Macbeth."}.
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","עמוד זה מתיר ליצור חשבון Jabber בשרת Jabber זה. כתובת JID (Jabber IDentifier) תגובש באופן של: username@server. נא לקרוא בזהירות את ההוראות למילוי השדות באופן נכון."}.
{"This page allows to unregister a Jabber account in this Jabber server.","עמוד זה מתיר לך לבטל רישום של חשבון Jabber בשרת Jabber זה."}.
{"Thursday","יום חמישי"}.
{"Time delay","זמן שיהוי"}.
{"Time","זמן"}.
{"Too many (~p) failed authentications from this IP address (~s). The address will be unblocked at ~s UTC","יותר מדי (~p) אימותים כושלים מתוך כתובת IP זו (~s). הכתובת תורשה לקבל גישה בשעה ~s UTC"}.
{"Too many unacked stanzas","יותר מדי סטנזות בלי אישורי קבלה"}.
{"To ~s","אל ~s"}.
{"Total rooms","חדרים סה״כ"}.
{"To","לכבוד"}.
{"Transactions Aborted:","טרנזקציות שבוטלו:"}.
{"Transactions Committed:","טרנזקציות שבוצעו:"}.
{"Transactions Logged:","טרנזקציות שנרשמו:"}.
{"Transactions Restarted:","טרנזקציות שהותחלו מחדש:"}.
{"Tuesday","יום שלישי"}.
{"Unauthorized","לא מורשה"}.
{"Unregister a Jabber account","בטל רישום חשבון Jabber"}.
{"Unregister","בטל רישום"}.
{"Update message of the day (don't send)","עדכן את בשורת היום (אל תשלח)"}.
{"Update message of the day on all hosts (don't send)","עדכן את בשורת היום בכל המארחים (אל תשלח)"}.
{"Update plan","תכנית עדכון"}.
{"Update ~p","עדכון ~p"}.
{"Update script","תסריט עדכון"}.
{"Update","עדכן"}.
{"Uptime:","זמן פעילות:"}.
{"Use of STARTTLS required","נדרש שימוש של STARTTLS"}.
{"User JID","JID משתמש"}.
{"User Management","ניהול משתמשים"}.
{"Username:","שם משתמש:"}.
{"Users Last Activity","פעילות משתמשים אחרונה"}.
{"User ~s","משתמש ~s"}.
{"Users","משתמשים"}.
{"User","משתמש"}.
{"Validate","הענק תוקף"}.
{"vCard User Search","חיפוש משתמש vCard"}.
{"Virtual Hosts","מארחים מדומים"}.
{"Voice request","בקשת ביטוי"}.
{"Wednesday","יום רביעי"}.
{"When to send the last published item","מתי לשלוח פריט מפורסם אחרון"}.
{"Whether to allow subscriptions","האם להתיר מנויים"}.
{"You can later change your password using a Jabber client.","ביכולתך לשנות את הסיסמה שלך מאוחר יותר באמצעות לקוח Jabber."}.
{"You need a client that supports x:data and CAPTCHA to register","עליך להשתמש בלקוח אשר תומך x:data וגם CAPTCHA בכדי להירשם"}.
{"You need a client that supports x:data to register the nickname","עליך להשתמש בלקוח אשר תומך x:data בכדי לרשום את שם הכינוי"}.
{"You need an x:data capable client to configure mod_irc settings","עליך להשתמש בלקוח אשר מסוגל להבין x:data בכדי להגדיר הגדרות של mod_irc"}.
{"You need an x:data capable client to configure room","עליך להשתמש בלקוח אשר מסוגל להבין x:data בכדי להגדיר חדר"}.
{"You need an x:data capable client to search","עליך להשתמש בלקוח אשר מסוגל להבין x:data בכדי לחפש"}.
{"Your Jabber account was successfully created.","חשבון Jabber נוצר בהצלחה."}.
{"Your Jabber account was successfully deleted.","חשבון Jabber נמחק בהצלחה."}.
{"Your messages to ~s are being blocked. To unblock them, visit ~s","ההודעות שלך לערוץ ~s הינן חסומות. כדי לבטל את חסימתן, בקר בכתובת ~s"}.
-1919
View File
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More