<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3367089818389183575</id><updated>2012-01-30T15:57:22.583+01:00</updated><category term='gsoc'/><category term='personal'/><category term='jabber'/><category term='ejabberd'/><title type='text'>Badlop</title><subtitle type='html'>Anteriormente en Todos mis circuitos</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-621982848311493964</id><published>2007-11-24T01:21:00.000+01:00</published><updated>2007-11-24T17:06:31.694+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>GSoC Aknowledgments</title><content type='html'>I would like to thank several people for their help in my Google Summer of Code project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mickaël Rémond (from &lt;a href="http://www.process-one.net/"&gt;Process-One&lt;/a&gt;) for mentoring me, and answering my constant questions about &lt;a href="http://www.erlang.org/"&gt;Erlang/OTP&lt;/a&gt; and &lt;a href="http://www.ejabberd.im/"&gt;ejabberd&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stpeter.im/"&gt;Peter Saint-Andre&lt;/a&gt; for answering my constant questions about &lt;a href="http://www.xmpp.org/"&gt;XMPP and XEPs&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ayena.de/"&gt;Tobias Markmann&lt;/a&gt; for sharing ideas about XEP-0033, and for hosting an ejabberd test server.&lt;/li&gt;&lt;li&gt;Gaston Dombiak (from &lt;a href="http://www.jivesoftware.com/"&gt;Jive Software&lt;/a&gt;) for sharing ideas and his experience of implementing XEP-0033 in &lt;a href="http://www.jivesoftware.com/products/openfire/"&gt;Openfire&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;/strong&gt;Anastasia Gornostaeva (from &lt;a href="http://www.jabber.ru/"&gt;Jabber.ru&lt;/a&gt;) from sharing ideas about  abuse-prevention in XEP-0033.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sergei Golovan (from &lt;a href="http://tkabber.jabber.ru/"&gt;Tkabber&lt;/a&gt;) for quickly improving Tkabber for my debugging purposes.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kismith.co.uk/"&gt;Kevin Smith&lt;/a&gt; and &lt;a href="http://el-tramo.be/"&gt;Remko Tronçon&lt;/a&gt; (from &lt;a href="http://psi-im.org/"&gt;Psi&lt;/a&gt;) for explaining how to get XEP-0033 to work in Psi.&lt;/li&gt;&lt;/ul&gt;I also want to express my general gratitude to some particular organizations and projects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Google, for their &lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/"&gt;XMPP Standards Foundation&lt;/a&gt; for working in XMPP, and for accepting my project proposal.&lt;/li&gt;&lt;li&gt;Alexey Shchepin for starting that cool &lt;a href="http://www.ejabberd.im/"&gt;ejabberd&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Joe Armstrong and all the other people that develop and improve the fascinating &lt;a href="http://www.erlang.org/"&gt;Erlang/OTP&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-621982848311493964?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/621982848311493964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=621982848311493964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/621982848311493964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/621982848311493964'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/11/gsoc-aknowledgments.html' title='GSoC Aknowledgments'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5383018705474156366</id><published>2007-11-23T23:26:00.000+01:00</published><updated>2007-11-24T01:34:08.979+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>GSoC Status Update: November'07</title><content type='html'>It has been three months since I posted the &lt;a href="http://badlop.blogspot.com/2007/08/final-gsoc-project-status.html%22"&gt;Final GSoC project status&lt;/a&gt;. It's time to report what happened with the remaining tasks.&lt;br /&gt;&lt;br /&gt;The tasks that I've completed since then are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perform code profiling to find bottlenecks and deficiencies in mod_multicast. Improve the code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once I make all the possible optimizations: perform benchmarks to check mod_multicast's effect in CPU, RAM and traffic consumption.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The tasks that I haven't completed yet are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wait for ejabberd code reviewers, in case I need to fix any problem in my XEP-0033 patches for ejabberd before they are applied to ejabberd trunk.&lt;/li&gt;&lt;li&gt;Discuss potential security and spam vulnerabilities (talk in JDEV and JADMIN mailint lists).&lt;/li&gt;&lt;li&gt;Add XEP33 support to ejabberd's Pub/Sub and/or PEP service once their codebase is stable.&lt;/li&gt;&lt;li&gt;Wait for Peter Saint-Andre's questions regarding his XEP-0033 update.&lt;/li&gt;&lt;/ul&gt;So this adventure has not ended yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5383018705474156366?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5383018705474156366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5383018705474156366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5383018705474156366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5383018705474156366'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/11/gsoc-status-update-november07.html' title='GSoC Status Update: November&apos;07'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-32312551361610339</id><published>2007-10-04T22:59:00.000+02:00</published><updated>2007-10-04T23:07:27.496+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Travel to Costa Rica</title><content type='html'>I have a travel to San José, Costa Rica for a whole week. The expected return is on Sunday, 15th of October.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-32312551361610339?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/32312551361610339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=32312551361610339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/32312551361610339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/32312551361610339'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/10/travel-to-costa-rica.html' title='Travel to Costa Rica'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-8266763496355841084</id><published>2007-10-02T22:17:00.000+02:00</published><updated>2007-10-02T23:14:13.414+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Results of mod_multicast execution time with timer:tc</title><content type='html'>I previously &lt;a href="http://badlop.blogspot.com/2007/10/major-performance-optimizations-in.html"&gt;presented timer:tc&lt;/a&gt; and &lt;a href="http://badlop.blogspot.com/2007/10/multicasttest-analyze-modmulticast.html"&gt;multicast_test&lt;/a&gt;. Now I'll illustrate some results I obtained with them.&lt;br /&gt;&lt;br /&gt;I ran 6 experiments, using normal routing, trusted multicast and untrusted multicast; both single and multiple servers. Each experiment was ran for several number of destination addresses.&lt;br /&gt;&lt;br /&gt;The time is expressed in microseconds (1 second = 1.000.000 microseconds). Note that the time shown here includes not only mod_multicast, but also packet building and ejabberd_router.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Results&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Normal - Single&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;           #     Exec Time   Time per destination&lt;br /&gt;Destinations (microseconds)        (microseconds)&lt;br /&gt;         1           161                 161.00&lt;br /&gt;       101          6074                  60.14&lt;br /&gt;       201         22163                 110.26&lt;br /&gt;       301         40950                 136.05&lt;br /&gt;       401         74586                 186.00&lt;br /&gt;       501        100445                 200.49&lt;br /&gt;       601        107012                 178.06&lt;br /&gt;       701        131163                 187.11&lt;br /&gt;       801        146473                 182.86&lt;br /&gt;       901        153147                 169.97&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Normal - Multiple&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;           #     Exec Time   Time per destination&lt;br /&gt;Destinations (microseconds)        (microseconds)&lt;br /&gt;         1           196                 196.00&lt;br /&gt;       101         11206                 110.95&lt;br /&gt;       201         20918                 104.07&lt;br /&gt;       301         30811                 102.36&lt;br /&gt;       401         43627                 108.80&lt;br /&gt;       501         52742                 105.27&lt;br /&gt;       601         59650                  99.25&lt;br /&gt;       701         75291                 107.41&lt;br /&gt;       801         81077                 101.22&lt;br /&gt;       901         80192                  89.00&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Trusted - Single&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;           #     Exec Time   Time per destination&lt;br /&gt;Destinations (microseconds)        (microseconds)&lt;br /&gt;         1           226                 226.00&lt;br /&gt;       101          8719                  86.33&lt;br /&gt;       201         39938                 198.70&lt;br /&gt;       301         77040                 255.95&lt;br /&gt;       401        101675                 253.55&lt;br /&gt;       501        122156                 243.82&lt;br /&gt;       601        144422                 240.30&lt;br /&gt;       701        158917                 226.70&lt;br /&gt;       801        186553                 232.90&lt;br /&gt;       901        197387                 219.08&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Trusted - Multiple&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;           #     Exec Time   Time per destination&lt;br /&gt;Destinations (microseconds)        (microseconds)&lt;br /&gt;         1           283                 283.00&lt;br /&gt;       101         21751                 215.36&lt;br /&gt;       201         41077                 204.36&lt;br /&gt;       301         66047                 219.43&lt;br /&gt;       401        102542                 255.72&lt;br /&gt;       501        315313                 629.37&lt;br /&gt;       601        140158                 233.21&lt;br /&gt;       701        164836                 235.14&lt;br /&gt;       801        171249                 213.79&lt;br /&gt;       901        189712                 210.56&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Untrusted - Single&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;            #     Exec Time   Time per destination&lt;br /&gt;Destinations (microseconds)        (microseconds)&lt;br /&gt;          1           317                 317.00&lt;br /&gt;        101         25528                 252.75&lt;br /&gt;        201         79402                 395.03&lt;br /&gt;        301        155075                 515.20&lt;br /&gt;        401        284532                 709.56&lt;br /&gt;        501        329484                 657.65&lt;br /&gt;        601        357879                 595.47&lt;br /&gt;        701        388755                 554.57&lt;br /&gt;        801        414622                 517.63&lt;br /&gt;        901        506557                 562.22&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Untrusted - Multiple&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;            #     Exec Time   Time per destination&lt;br /&gt;Destinations (microseconds)        (microseconds)&lt;br /&gt;          1          1121                1121.00&lt;br /&gt;        101        115736                1157.36&lt;br /&gt;        201        331379                1656.89&lt;br /&gt;        301        601325                2004.42&lt;br /&gt;        400       2478072                6195.18&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What does this show? The computation time per destination address remains constant across different packet sizes. The fluctuations are only due to my computer: it was being used for other tasks, not only running those experiments [1].&lt;br /&gt;&lt;br /&gt;For example, processing a packet with 300 destination addresses (few rosters and chatrooms have more than this number of items) costs around 77 milliseconds if the source is trusted (a local MUC service or session manager). The same packet costs 155 milliseconds if the source is not trusted and the packet must be carefully inspected.&lt;br /&gt;&lt;br /&gt;In the less bright side of the results, the Multiple set of experiments again perform quite badly compared to Single. Note that part of this is due to the function add_addresses, as explained in &lt;a href="http://badlop.blogspot.com/2007/10/results-of-code-profiling-modmulticast.html"&gt;the Fprof article&lt;/a&gt;. Another part of the problem is not in the server, but in the stressing tool: the building function I implemented in multicast_test puts non-existent servernames when it's run with the 'Multiple' option: "5.localhost", "7.localhost"...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Conclusions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As a summary, the results I obtained using timer:tc are compatible with the previous results I obtained with Fprof and Jabsimul. All them indicate that mod_multicast consumes approximately, in average, as much time as the ejabberd routing functions do.&lt;br /&gt;&lt;br /&gt;So, using multicast increases the CPU consumption, as was expected. This cost will be acceptable once the benefits of multicasting are taken into account.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;[1] Statistically speaking, it would be preferable to run a batch of experiments and show only the average and confidence interval, but I guess this is not really required for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-8266763496355841084?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/8266763496355841084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=8266763496355841084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/8266763496355841084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/8266763496355841084'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/10/results-of-modmulticast-execution-time.html' title='Results of mod_multicast execution time with timer:tc'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5527153066731802458</id><published>2007-10-02T21:49:00.000+02:00</published><updated>2007-10-02T22:05:07.903+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Results of code profiling mod_multicast with Fprof</title><content type='html'>I previously &lt;a href="http://badlop.blogspot.com/2007/10/major-performance-optimizations-in.html"&gt;presented Fprof&lt;/a&gt; and &lt;a href="http://badlop.blogspot.com/2007/10/multicasttest-analyze-modmulticast.html"&gt;multicast_test&lt;/a&gt;. Now I'll illustrate some results I obtained with them.&lt;br /&gt;&lt;br /&gt;I tried using normal routing, trusted multicast and untrusted multicast. Both single and multiple servers. And a fixed number of 300 destination addresses.&lt;br /&gt;&lt;br /&gt;All those experiments generate a lot of information, so I summarize here only the important results. Times are in milliseconds, and measure the full processing time in the system where the experiments were ran.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Results&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Normal - Single&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total: 320&lt;br /&gt;build_packet: 30&lt;br /&gt;ejabberd_router: 275&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Normal - Multiple&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total: 630&lt;br /&gt;build_packet: 30&lt;br /&gt;ejabberd_router: 593&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Trusted - Single&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total: 410&lt;br /&gt;build_packet: 30&lt;br /&gt;ejabberd_router: 266&lt;br /&gt;mod_multicast: 114&lt;br /&gt;string_to_jid already requires: 52&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Trusted - Multiple&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total: 2020&lt;br /&gt;build_packet: 30&lt;br /&gt;ejabberd_router: 700&lt;br /&gt;mod_multicast: 1290&lt;br /&gt;add_addresses consumes too much here: 1067&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Untrusted - Single&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total: 500&lt;br /&gt;build_packet: 30&lt;br /&gt;ejabberd_router: 270&lt;br /&gt;mod_multicast: 200&lt;br /&gt;string_to_jid requires: 50&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Untrusted - Multiple&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total: 2060&lt;br /&gt;build_packet: 30&lt;br /&gt;ejabberd_router: 640&lt;br /&gt;mod_multicast: 1390&lt;br /&gt;add_addresses consumes too much here: 1070&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Analysis&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;In those examples, using mod_multicast does not reduce the time consumed by ejabberd_router because the multicast packet is mean to be sent to local users, so the routing process is called 300 times always. If the destinations were not local, and some of them were on the same servers, ejabberd_router would be called less frequently and so the usage of mod_multicast would be noticeable in that aspect too.&lt;br /&gt;&lt;br /&gt;The Trusted multicast requires only half of the time required by ejabberd_router itself. In the case of Untrusted, the additional checks make mod_multicast as costly as ejabberd_router.&lt;br /&gt;&lt;br /&gt;In the case of Trusted multicast, the function in mod_multicast that consumes the more processing time is jlib:string_to_jid. In Untrusted, the most problematic function is add_addresses. Maybe the code of that function can be improved.&lt;br /&gt;&lt;br /&gt;Summarizing, I consider that mod_multicast code is fairly efficient when compared to other parts of ejabberd, specially ejabberd_router.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5527153066731802458?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5527153066731802458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5527153066731802458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5527153066731802458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5527153066731802458'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/10/results-of-code-profiling-modmulticast.html' title='Results of code profiling mod_multicast with Fprof'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6992943929954118438</id><published>2007-10-02T19:58:00.000+02:00</published><updated>2007-10-02T20:07:33.006+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>multicast_test: analyze mod_multicast performance</title><content type='html'>To measure mod_multicast computation consumption I developed a small Erlang module: &lt;a href="http://www.ejabberd.im/files/contributions/multicast_test.erl"&gt;multicast_test&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This module includes functions to create a message packet with an &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP33&lt;/a&gt; 'addresses' element. The number of destinations is configurable. And the server of each destination can be 'single', so all destinations are in the same server, or 'multiple', so each destination is from a different server. This packet can be sent to route_trusted or route_unstrusted. It is also possible to send individual packets to ejabberd_router.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Code profiling&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is possible to run those functions with Fprof to profile the time consumed by each function in mod_multicast:&lt;br /&gt;&lt;blockquote&gt;fprof:apply(multicast_test, ROUTING, [SERVERS, NUM_DESTS]).&lt;br /&gt;fprof:profile().&lt;br /&gt;fprof:analyse([{dest, []}]).&lt;/blockquote&gt;Where:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ROUTING: testn for normal routing, testt for trusted sender, and testu for untrusted sender.&lt;/li&gt;&lt;li&gt;SERVERS: single for just a single server, multiple for a different server for each destination address.&lt;/li&gt;&lt;li&gt;NUM_DESTS: number of destination addresses.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For example, execute this in the Erlang shell of the ejabberd node:&lt;br /&gt;&lt;blockquote&gt;fprof:apply(multicast_test, testu, [single, 300]).&lt;br /&gt;fprof:profile().&lt;br /&gt;fprof:analyse([{dest, []}]).&lt;/blockquote&gt;And you will get a file fprof.analysis with very detailed information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Execution time&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's also possible to measure the execution time of those functions with a varying number of destinations. This will show if the performance of mod_multicast is dependant on the number of destinations or the number of destination servers...&lt;br /&gt;&lt;br /&gt;The functions are:&lt;br /&gt;&lt;blockquote&gt;multicast_test:ROUTING(SERVERS, INI, END, INC).&lt;/blockquote&gt;Where:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ROUTING: normal, trusted, untrusted.&lt;/li&gt;&lt;li&gt;SERVERS: single or multiple.&lt;/li&gt;&lt;li&gt;INI, END and INC: The initial number of destinations, the increment and the ending value.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For example:&lt;br /&gt;&lt;blockquote&gt;multicast_test:untrusted(single, 1, 1000, 100).&lt;/blockquote&gt;I will later post some results I obtained using those functions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6992943929954118438?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6992943929954118438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6992943929954118438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6992943929954118438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6992943929954118438'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/10/multicasttest-analyze-modmulticast.html' title='multicast_test: analyze mod_multicast performance'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6950826012078494224</id><published>2007-10-02T19:31:00.000+02:00</published><updated>2007-10-02T20:06:07.107+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Results of stressing ejabberd+mod_multicast with Jabsimul</title><content type='html'>I tested mod_multicast in a living server, stressing it with synthetically generated load using Jabsimul.&lt;br /&gt;&lt;br /&gt;The setup was: create 300 accounts with Testsuite's userreg; create a Shared Roster Group with @all@; configure Jabsimul to login in all the 300 accounts and change presence every 60 seconds.&lt;br /&gt;&lt;br /&gt;Note that each user has 299 contacts online, and consequently each presence change generates a presence packet with 299 destination addresses.&lt;br /&gt;&lt;br /&gt;I ran Jabsimul against an unaltered ejabberd trunk, and also a mod_multicast enabled version. The CPU consumption in both cases varied around 20% to 30%. I couldn't find a clear difference between enabling or disabling mod_multicast. The Virtual memory was around 125MB, and Resident memory around 105MB.&lt;br /&gt;&lt;br /&gt;It seems the computation resources required by mod_multicast are only a small part of all the processing that takes place in ejabberd. So, this test indicates that probably enabling XEP33 in an ejabberd server does not have an appreciable impact in the server CPU or RAM consumption.&lt;br /&gt;&lt;br /&gt;The computer used in the tests:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AMD Athlon(tm) 64 Processor 3000+, 4.000 Bogomips&lt;/li&gt;&lt;li&gt;1 GB RAM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Debian sid&lt;/li&gt;&lt;li&gt;Linux 2.6.22-2-686 (Debian package)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Erlang R11B-5 (Debian package)&lt;/li&gt;&lt;li&gt;ejabberd SVN r952&lt;/li&gt;&lt;li&gt;mod_multicast SVN r394&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you run your own tests and find a differing conclusion, please tell me.&lt;br /&gt;&lt;br /&gt;PD: Some instructions to get Jabber Test Suite and Jabsimul: &lt;a href="http://www.ejabberd.im/benchmark"&gt;Benchmarking Jabber/XMPP Servers with Jabsimul&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6950826012078494224?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6950826012078494224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6950826012078494224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6950826012078494224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6950826012078494224'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/10/results-of-stressing.html' title='Results of stressing ejabberd+mod_multicast with Jabsimul'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-2540476743521965650</id><published>2007-10-01T09:37:00.000+02:00</published><updated>2007-10-01T09:47:17.773+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Major performance optimizations in mod_multicast</title><content type='html'>When I finished my &lt;a href="http://code.google.com/soc/2007/"&gt;Google Summer of Code 2007&lt;/a&gt; project about implementing &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt; in &lt;a href="http://www.ejabberd.im/"&gt;ejabberd&lt;/a&gt;, I ran some benchmarking and found that my multicast module performed really bad.&lt;br /&gt;&lt;br /&gt;It was explained in &lt;a href="http://badlop.blogspot.com/2007/08/ejabberd-gets-xep-0033-extended-stanza.html"&gt;ejabberd gets XEP-0033: Extended Stanza Addressing&lt;/a&gt;. For example, CPU consumption was multiplied by x3 when users sent XEP33 packets to around 40 destinations.&lt;br /&gt;&lt;br /&gt;This result was not surprising since my focus during the GSoC time was to implement XEP33 correctly, not efficiently. I added as a post-GSoC task to perform code profiling, find bottlenecks and deficiencies in mod_multicast, and improve the code accordingly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Used tools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;During September I've learned about several tools in &lt;a href="http://www.erlang.org/"&gt;Erlang/OTP&lt;/a&gt; to analyze Erlang source code. After experimenting with them in several of my ejabberd contributions, this weekend I decided it was time to come back to mod_multicast.&lt;br /&gt;&lt;br /&gt;The tools I used for code profiling are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.erlang.org/doc/apps/debugger/"&gt;Debugger&lt;/a&gt;: graphical tool which can be used for debugging and testing of Erlang programs.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.erlang.org/doc/man/dialyzer.html"&gt;Dialyzer&lt;/a&gt;: static analysis tool that identifies software discrepancies such as type errors, unreachable code, unnecessary tests.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.erlang.org/doc/apps/tools/"&gt;Cover&lt;/a&gt;: coverage analysis tool for Erlang. Shows how many times is executed each line of the source code file.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.erlang.org/doc/apps/tools/"&gt;Fprof&lt;/a&gt;: profiling tool that can be used to get a picture of how much processing time different functions consumes and in which processes.&lt;/li&gt;&lt;/ul&gt;For benchmarking, I used those tools:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.erlang.org/doc/man/timer.html"&gt;Timer:tc&lt;/a&gt;: Measure the elapsed real time while executing a function.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Testsuite: to create a lot of Jabber accounts.&lt;/li&gt;&lt;li&gt;ejabberd's mod_shared_roster: to populate the rosters with a lot of contacts.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Jabsimul: stress the server sending constant presence changes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;top: view ejabberd consumption of CPU and RAM.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.erlang.org/doc/apps/observer/"&gt;etop&lt;/a&gt;: similar to top, but to view Erlang processes.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Performance improvements&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The part of mod_multicast packet processing that consumed more time was the traversal and formatting of the list of destination addresses. A task was specially time consuming in my early code: conversion of string to JID. And to make things worse, each destination address was converted from string to JID several times, for stupid reasons.&lt;br /&gt;&lt;br /&gt;Yesterday I rewrote and reorganized a lot of the code that handles multicast packets. I'll now describe the important changes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * Software engineering 101&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Replace the do_route* control-passing functions with a main function 'route_untrusted' that has the control and calls worker functions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * Erlang/OTP Programming with Style 101&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use Throw and Catch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * Route_unstrusted&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The function route_untrusted is used for any multicast packet that was sent from an untrusted source (local user, remote user, remote server, remote service). This packet is completely checked: access permissions, packet format, limit of number of destinations, packet relay.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * Route_trusted&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The function route_trusted is used by local services like MUC and the session manager. Since the source of the packet is trusted by the multicast service, the packet is not checked.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * Route_common&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The function route_common performs the main processing tasks: find a multicast service for each remote server (either in cache or start the query process), and send the packets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * Packet prebuilding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are two important improvements in the packets building task: the set of 'address' elements that represents each group of destinations is built initially, not for every packet sent. This is where the 'delivered=true' attribute is added.&lt;br /&gt;&lt;br /&gt;Also for each group of destinations, they get a prebuilt packet which includes all the other addresses (with the 'delivered=true' attribute already present).&lt;br /&gt;&lt;br /&gt;Finally, the list of groups is traversed, and for each one the only remaining duty is to build the final packet (by simply concatenating the list of addresses), and route to the destination.&lt;br /&gt;&lt;br /&gt;This implementation has a complexity of order N, while the old implementation had complexity of order N^N.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusions&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I've described the nature of the performance improvements in mod_multicast. I'll soon describe how I ran the benchmarking tools, and the observed results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-2540476743521965650?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/2540476743521965650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=2540476743521965650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/2540476743521965650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/2540476743521965650'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/10/major-performance-optimizations-in.html' title='Major performance optimizations in mod_multicast'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-2740430510221767214</id><published>2007-08-20T21:52:00.000+02:00</published><updated>2007-08-20T22:14:00.646+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Summary of my GSoC project</title><content type='html'>The Google Summer of Code 2007 has finished. It's time to summarize the results.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Patches submitted to the ejabberd bug tracker&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-234"&gt;XEP-0203: Delayed delivery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-235"&gt;XEP-0157: Contact Addresses for XMPP Services&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-329"&gt;New ejabberd router for multicast packets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-266"&gt;mod_muc use XEP-0033 to reduce bandwidth consumption in message stanzas&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-267"&gt;ejabberd_c2s use XEP-0033 to reduce bandwidth consumption in presence stanzas&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-265"&gt;Service for XEP-0033: Extended Stanza Addressing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-325"&gt;XEP-0133: Service Administration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-247"&gt;Describe in developer doc how to receive answers to IQ in an ejabberd module&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Protocols that I have (partially) read during my project&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0004.html"&gt;XEP-0004: Data Forms&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0022.html"&gt;XEP-0022: Message Events&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0030.html"&gt;XEP-0030: Service Discovery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0045.html"&gt;XEP-0045: Multi-User Chat&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0050.html"&gt;XEP-0050: Ad-Hoc Commands&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0068.html"&gt;XEP-0068: Field Standardization for Data Forms&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0082.html"&gt;XEP-0082: XMPP Date and Time Profiles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0133.html"&gt;XEP-0133: Service Administration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0157.html"&gt;XEP-0157: Contact Addresses for XMPP Services &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0160.html"&gt;XEP-0160: Best Practices for Handling Offline Messages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0202.html"&gt;XEP-0202: Entity Time&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0203.html"&gt;XEP-0203: Delayed delivery&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Collateral tasks&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I reported to Peter Saint-Andre all the errors that I found in the XEPs.&lt;/li&gt;&lt;li&gt;During my implementation of XEP-0033 I wrote several blog posts proposing changes in this protocol. Peter Saint-Andre will use those texts to update the protocol.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start to use Emacs to format Erlang code (emacs-mode) and commit to SVN repository (psvn).&lt;/li&gt;&lt;li&gt;Start to read Joe Armstrong's new book: &lt;a href="http://www.pragmaticprogrammer.com/titles/jaerlang"&gt;Programming Erlang - Software for a Concurrent World&lt;/a&gt;. Apply the new knowledge while programming in my GSoC tasks.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start to read GSoC gift book, Karl Fogel's &lt;a href="http://www.producingoss.com/"&gt;Producing Open Source Software - How to Run a Successful Free Software Project&lt;/a&gt;. Apply the new knowledge in my ejabberd tasks.&lt;/li&gt;&lt;li&gt;Continue my involvement in ejabberd as usual, which includes being active in ejabberd's forum, chatroom, mailing list and ejabberd-modules contribution SVN repository.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Two travels, one of them international :)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-2740430510221767214?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/2740430510221767214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=2740430510221767214' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/2740430510221767214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/2740430510221767214'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/summary-of-my-gsoc-project.html' title='Summary of my GSoC project'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-3863680482470314047</id><published>2007-08-19T18:01:00.000+02:00</published><updated>2007-08-19T22:58:28.667+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Final GSoC project status</title><content type='html'>A week ago I posted my &lt;a href="http://badlop.blogspot.com/2007/08/almost-final-gsoc-project-status.html"&gt;Almost final GSoC project status&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since the previous status update I completed those tasks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implement or update as much as possible XEP133 Service Administration in ejabberd.&lt;/li&gt;&lt;li&gt;Prepare and submit patches to ejabberd bug tracker.&lt;/li&gt;&lt;/ul&gt;The tasks that I haven't completed and my plans to complete them are, in no special order:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perform code profiling to find bottlenecks and deficiencies in mod_multicast. Improve the code. - I'll focus in that topic from now on.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once I make all the possible optimizations: perform benchmarks to check mod_multicast's effect in CPU, RAM and traffic consumption.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Wait for ejabberd code reviewers, in case I need to fix any problem in my code before they are applied to ejaabberd trunk.&lt;/li&gt;&lt;li&gt;Discuss potential security and spam vulnerabilities (talk in JDEV and JADMIN mailint lists).&lt;/li&gt;&lt;li&gt;Add XEP33 support to ejabberd's Pub/Sub and/or PEP service once their codebase is stable.&lt;/li&gt;&lt;li&gt;Wait for Peter Saint-Andre's questions regarding his XEP-0033 update.&lt;/li&gt;&lt;li&gt;September 7th: Upload final code to Google Summer of Code hosting.&lt;/li&gt;&lt;/ul&gt;The Google Summer of Code 2007 has finished, so those remaining tasks fall out of the scope of my GSoC project timeline. However, I consider them important for my own personal project timeline. So you can expect me to work on all of them at some time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-3863680482470314047?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/3863680482470314047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=3863680482470314047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3863680482470314047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3863680482470314047'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/final-gsoc-project-status.html' title='Final GSoC project status'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-1786855194914806177</id><published>2007-08-19T10:07:00.000+02:00</published><updated>2007-08-19T17:37:08.282+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>ejabberd gets XEP-0033: Extended Stanza Addressing</title><content type='html'>I consider finished my GSoC task of implementing &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt; in ejabberd.&lt;br /&gt;&lt;br /&gt;The implementation is divided in several parts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New ejabberd module that provides a multicast service: &lt;a href="https://support.process-one.net/browse/EJAB-265"&gt;mod_multicast.erl&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A small router for multicast packets: &lt;a href="https://support.process-one.net/browse/EJAB-329"&gt;ejabberd_router_multicast.erl&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-266"&gt;mod_muc uses the new multicast router for message stanzas&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://support.process-one.net/browse/EJAB-267"&gt;ejabberd_c2s uses the new multicast router for presence stanzas&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The largest part of the code is in the multicast service (mod_multicast).&lt;br /&gt;&lt;br /&gt;Tomorrow is the GSoC pencils down deadline. This means that I will be evaluated only for the code that I wrote until today.&lt;br /&gt;&lt;br /&gt;I expect all my code to be eventually included in ejabberd trunk. However, I'll propose that mod_multicast is disabled by default in the example configuration. At least in the first ejabberd release that includes that module.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Benchmark&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I made some benchmarks using Jabsimul. The performance indexes that I could evaluate are only the %CPU and MB of RAM consumed by the ejabberd program. I created 900 accounts, and populated each one with around 40 roster items of type 'both'. Then, using Jabsimul each logged user changed its presence every few seconds.&lt;br /&gt;&lt;br /&gt;With the patches and the multicast service enabled with small rosters and small chatrooms (less than 5 contacts or paticipants), there's a small increase in CPU consumption. With medium-size rosters (40 roster items), the CPU consumption triplicates in respect to the stock ejabberd trunk version.&lt;br /&gt;&lt;br /&gt;Obviously, I don't consider acceptable when the CPU consumption is multiplied by 3 just because all the packets use XEP33 with 40 destinations. The bottleneck is mod_multicast.&lt;br /&gt;&lt;br /&gt;However, this result does not surprise me at all. During my GSoC coding I only cared about optimization in the patches that will be commited to ejabberd trunk: ejabberd_c2s, mod_muc_room and ejabberd_router_multicast. I didn't care about code optimizations in mod_multicast. For me it was far &lt;span style="font-weight: bold;"&gt;more important the functionality correctness&lt;/span&gt;. Now that mod_multicast works correctly, I can concentrate in improving it without breaking its correctness.&lt;br /&gt;&lt;br /&gt;This planning allowed me to do all the stuff that I planned for my GSoC project, and finish the summer with correct and working code. During the last week of August I plan to profile, reorganize and improve mod_multicast to reduce its computational consumption as much as possible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Unexpected improvement&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The funny thing is that my patches to ejabberd core with a disabled multicast service reduce slightly the CPU consumption compared to the stock ejabberd trunk version. This means that there is a possible optimization in ejabberd that does not deal with XEP33 at all. If properly investigated, this improvement could be included in ejabberd trunk and benefit all ejabberd deployments, not only the ones with multicast enabled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-1786855194914806177?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/1786855194914806177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=1786855194914806177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/1786855194914806177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/1786855194914806177'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/ejabberd-gets-xep-0033-extended-stanza.html' title='ejabberd gets XEP-0033: Extended Stanza Addressing'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6983042484925438977</id><published>2007-08-18T19:53:00.000+02:00</published><updated>2007-08-18T20:01:35.913+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Temporary Lists of Recipients - proposal for XEP33</title><content type='html'>When I started my Google Summer of Code project three months ago, Tobias Markmann pointed me to his &lt;a href="http://ayena.de/index.php?q=tlor"&gt;Temporary Lists of Recipients&lt;/a&gt; proposal.&lt;br /&gt;&lt;br /&gt;The purpose is to reduce even more the bandwidth consumption by sharing a common list of JIDs between the two entities which maintain a XEP33 communication.&lt;br /&gt;&lt;br /&gt;The idea seems worth to be considered... once the current XEP33 is already implemented and deployed in the XMPP world. So I bookmark this proposal for future reference, and let's see what happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6983042484925438977?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6983042484925438977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6983042484925438977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6983042484925438977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6983042484925438977'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/temporary-lists-of-recipients-proposal.html' title='Temporary Lists of Recipients - proposal for XEP33'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-7454101813409763989</id><published>2007-08-18T19:49:00.000+02:00</published><updated>2007-08-18T19:50:30.633+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Multiple replyto and enforce all them in XEP33</title><content type='html'>Yesterday I was chatting about XEP33 with Elmex in the ejabberd chatroom. He point me to a strange topic in this protocol:&lt;br /&gt;`There MAY be more than one replyto or replyroom on a stanza, in which case the reply stanza MUST be routed to all of the addresses.'&lt;br /&gt;&lt;a href="http://chatlogs.jabber.ru/ejabberd@conference.jabber.ru/2007/08/16.html#01:59:49"&gt;Here is the chatroom log&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What does that mean? If a client receives a message with extended stanza addresses, and 100 replyto or replyroom, and the user wants to answer, XEP33 forces the client to send the response to all 100 addresses. Why should we allow the sending entity to enforce the receiving entity to answer to all address, instead of giving him the power to answer only to some? In the email world is this enforcement also present?&lt;br /&gt;&lt;br /&gt;I think this topic could be reconsidered for the next XEP33 version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-7454101813409763989?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/7454101813409763989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=7454101813409763989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/7454101813409763989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/7454101813409763989'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/multiple-replyto-and-enforce-all-them.html' title='Multiple replyto and enforce all them in XEP33'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6316085115051707778</id><published>2007-08-18T09:55:00.000+02:00</published><updated>2007-08-18T10:54:44.249+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejabberd'/><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>ejabberd gets XEP-0133: Service Administration</title><content type='html'>One of the minor tasks in my Google Summmer of Code project was to implement in ejabberd as many of the 31 commands described in &lt;a href="http://www.xmpp.org/extensions/xep-0133.html"&gt;XEP-0133: Service Administration&lt;/a&gt; as possible.&lt;br /&gt;&lt;br /&gt;Aleksey Shchepin already implemented many commands in ejabberd more than 4 years ago. A year and a half ago Magnus Henoch updated them to use &lt;a href="http://www.xmpp.org/extensions/xep-0050.html"&gt;XEP-0050: Ad-Hoc Commands&lt;/a&gt;. So, I just had to update them a little to become XEP-0133 compliant:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;23. Send Announcement to Online Users&lt;/li&gt;&lt;li&gt;24. Set Message of the Day&lt;/li&gt;&lt;li&gt;25. Edit Message of the Day&lt;/li&gt;&lt;li&gt;26. Delete Message of the Day&lt;/li&gt;&lt;/ul&gt;The commands that I implemented from scratch are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1. Add User&lt;/li&gt;&lt;li&gt;2. Delete User&lt;/li&gt;&lt;li&gt;5. End User Session&lt;/li&gt;&lt;li&gt;6. Get User Password&lt;/li&gt;&lt;li&gt;7. Change User Password&lt;/li&gt;&lt;li&gt;9. Get User Last Login Time&lt;/li&gt;&lt;li&gt;10. Get User Statistics&lt;/li&gt;&lt;li&gt;13. Get Number of Registered Users&lt;/li&gt;&lt;li&gt;15. Get Number of Online Users&lt;/li&gt;&lt;li&gt;30. Restart Service&lt;/li&gt;&lt;li&gt;31. Shut Down Service&lt;/li&gt;&lt;/ul&gt;Other commands are not implemented, and I didn't add them because I consider ejabberd already provides other ways more suitable:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;8. Get User Roster&lt;/li&gt;&lt;li&gt;18. Get List of Registered Users&lt;/li&gt;&lt;li&gt;20. Get List of Online Users&lt;/li&gt;&lt;li&gt;27. Set Welcome Message&lt;/li&gt;&lt;li&gt;28. Delete Welcome Message&lt;/li&gt;&lt;li&gt;29. Edit Admin List&lt;/li&gt;&lt;/ul&gt;And finally, I didn't implement those commands because they use features not available in ejabberd:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;3. Disable User&lt;/li&gt;&lt;li&gt;4. Re-Enable User&lt;/li&gt;&lt;li&gt;11. Edit Blacklist&lt;/li&gt;&lt;li&gt;12. Edit Whitelist&lt;/li&gt;&lt;li&gt;14. Get Number of Disabled Users&lt;/li&gt;&lt;li&gt;16. Get Number of Active Users&lt;/li&gt;&lt;li&gt;17. Get Number of Idle Users&lt;/li&gt;&lt;li&gt;19. Get List of Disabled Users&lt;/li&gt;&lt;li&gt;21. Get List of Active Users&lt;/li&gt;&lt;li&gt;22. Get List of Idle Users&lt;/li&gt;&lt;/ul&gt;During this task, I found and reported some typo errors to the author of the XEP (Peter Saint-Andre).&lt;br /&gt;&lt;br /&gt;Finally, I tested most commands with Tkabber SVN, Psi SVN and Gajim SVN. Sergei Golovan quickly fixed a small bug in Tkabber, and now all three clients work perfectly :)&lt;br /&gt;&lt;br /&gt;I'm quite happy with the result, so I took this screenshot that depicts the impressive list of commands that allow an administrator to configure ejabberd just with a Jabber client:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_T2DxWhg7uW0/RsawbYKmKjI/AAAAAAAAAAM/9MKYDnqkWHE/s1600-h/xep133-tkabber.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_T2DxWhg7uW0/RsawbYKmKjI/AAAAAAAAAAM/9MKYDnqkWHE/s320/xep133-tkabber.png" alt="" id="BLOGGER_PHOTO_ID_5099957612433517106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Note that the commands are nested in the Service Discovery to allow the admin to find them easier.&lt;br /&gt;&lt;br /&gt;The patch is available &lt;a href="http://support.process-one.net/browse/EJAB-325"&gt;here&lt;/a&gt;. I hope it has quality enough to enter ejabberd trunk easily, so it is published in the next major ejabberd release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6316085115051707778?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6316085115051707778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6316085115051707778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6316085115051707778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6316085115051707778'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/ejabberd-gets-xep-0133-service.html' title='ejabberd gets XEP-0133: Service Administration'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_T2DxWhg7uW0/RsawbYKmKjI/AAAAAAAAAAM/9MKYDnqkWHE/s72-c/xep133-tkabber.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6211235049416906095</id><published>2007-08-14T15:10:00.000+02:00</published><updated>2007-08-14T19:42:05.393+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Almost final GSoC project status</title><content type='html'>A month ago I posted my &lt;a href="http://badlop.blogspot.com/2007/07/midterm-gsoc-project-status-and.html"&gt;Midterm GSoC project status, and remaining work&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since the previous status update I completed those tasks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Plan improvements in the current XEP33 definition of limits. I recently posted a summary: &lt;a href="http://badlop.blogspot.com/2007/08/summary-of-xep33-addresses-limits.html"&gt;http://badlop.blogspot.com/2007/08/summary-of-xep33-addresses-limits.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Implement the improvements for limits in mod_multicast.&lt;/li&gt;&lt;li&gt;Propose improvements for XEP33. The &lt;a href="http://wiki.jabber.org/index.php/Extended_Stanza_Addressing_%28XEP-0033%29"&gt;XEP33 wiki page&lt;/a&gt; lists the proposed changes.&lt;/li&gt;&lt;li&gt;Test compatibility with other XEP33 existing implementations: Openfire, Psi, Tkabber. Results are reported in: &lt;a href="http://badlop.blogspot.com/2007/08/xep33-implementations-separate-service.html"&gt;XEP33 implementations: separate service or embedded support?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Write documentation: configuration is explained in README.txt&lt;/li&gt;&lt;/ul&gt;The remaining tasks that I'm aware of, from now until the end of my GSoC project are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implement or update as much as possible XEP133 Service Administration in ejabberd.&lt;/li&gt;&lt;li&gt;Perform code profiling to find bottlenecks and deficiencies in mod_multicast. Improve the code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Perform benchmarks to check mod_multicast's effect in CPU, RAM and traffic consumption.&lt;/li&gt;&lt;li&gt;Prepare and submit patches to ejabberd bug tracker.&lt;/li&gt;&lt;li&gt;Upload final code to Google Summer of Code hosting.&lt;/li&gt;&lt;li&gt;Wait for ejabberd code reviewers, in case I need to fix any problem in my code before commiting to ejabberd.&lt;/li&gt;&lt;li&gt;Discuss potential security and spam vulnerabilities (talk in JDEV and JADMIN mailint lists).&lt;/li&gt;&lt;li&gt;Add XEP33 support to ejabberd's Pub/Sub and/or PEP service if their codebase is stable at the time.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6211235049416906095?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6211235049416906095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6211235049416906095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6211235049416906095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6211235049416906095'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/almost-final-gsoc-project-status.html' title='Almost final GSoC project status'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-8300704072060274652</id><published>2007-08-13T23:45:00.000+02:00</published><updated>2007-08-14T09:20:10.714+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>XEP33 implementations: separate service or embedded support?</title><content type='html'>The current version of &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt; says:&lt;br /&gt;&lt;blockquote&gt;The IM service MAY implement multicast directly, or it MAY delegate that chore to a separate service.&lt;/blockquote&gt;Where must a Jabber entity send message and presence stanzas with XEP33 addresses, if they expect them to be routed as specified in XEP33? They must send them to a Jabber entity that advertises this feature: http://jabber.org/protocol/address.&lt;br /&gt;&lt;br /&gt;What entities may support this feature? A Jabber server may have embedded support for XEP33, let's suppose the server JID is jabber.example.org. Or it can delegate that task to a separate service, which JID could be multicast.jabber.example.org.&lt;br /&gt;&lt;br /&gt;How can a Jabber entity know if his local server supports XEP33? Asking disco#info to the server (which JID is jabber.example.org). However, this is not enough when the server delegates to a separate service. So, the entity should also ask the first-level services provided by the server: chatrooms.jabber.example.org, pubsub.jabber.example.org, ... and also multicast.jabber.example.org.&lt;br /&gt;&lt;br /&gt;During my GSoC project, I implemented the server-part of XEP33 in an ejabberd module called mod_multicast. This module provides a separate service just for multicast. This means that an ejabberd server with JID jabber.example.org, with my work installed and enabled, will provide XEP33 support in a service with JID multicast.jabber.example.org.&lt;br /&gt;&lt;br /&gt;I implemented it as a separate service service for efficiency reasons. I consider that listening in the main server JID for XEP33-enabled stanzas would need more code (well, no more than 30 lines of code) and more computations than listening in a specific JID.&lt;br /&gt;&lt;br /&gt;This is not a big problem with message and presence stanzas since the main server JID is not expected to receive message or presence stanzas at all. But think about iq stanzas. The server receives a lot of iq requests, and sends iq replies. Remember that a XEP33 server will send iq queries, and receive replies from remote servers. I thought that using the main JID both for typical IQ tasks and also for multicasting would be a little mess. So I preferred to keep all multicasting separate in a specific JID.&lt;br /&gt;&lt;br /&gt;As XEP33 gets more widely adopted, maybe it makes sense to move all the XEP33 code from mod_multicast to an internal core file, and serve it embedded instead of a separate service. But right now, I think the current solution is clean, efficient, and respects the protocol.&lt;br /&gt;&lt;br /&gt;What about clients, and remote servers? Obviously, it isn't efficient to query all the first-level items in the server just to know if one of them supports XEP33. It would be faster to just ask the server. This translates in three aspects: more code, more CPU consumption and more bandwidth consumption.&lt;br /&gt;&lt;br /&gt;However, they are not much a problem. Probably 20 or 30 lines of code are enough to program the loop to check all server items. And this check is done only the &lt;b&gt;very first&lt;/b&gt; time a server queries other server. Once a server/client knows that jabber.example.org supports XEP33 in multicast.jabber.example.org, this knowledge is stored in cache. When the cache item is obsolete (maybe in 12 or 24 hours), there is no need to perform another full disco traversal! The client only needs to revalidate the cache item, asking features directly to multicast.jabber.example.org.&lt;br /&gt;&lt;br /&gt;I'm aware of only three programs that implement XEP33, or a part of it:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Openfire server has basic support of XEP33. It provides the feature embedded. It only queries the server, not the services.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Psi client has very basic support for sending XEP33 message stanzas. It only queries the server, not the services.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tkabber client has very basic support for showing extended information included in XEP33 message stanzas. Since it does not send XEP33 stanzas, it does not need to query for XEP33 support.&lt;/li&gt;&lt;/ul&gt;This means that ejabberd's mod_multicast can send to Openfire. But Openfire and Psi can't send to ejabberd because they are unaware that the ejabberd server has XEP33 support in a separate service. Note that all three programs implement XEP33 correctly. And even then, they are incompatible in practice.&lt;br /&gt;&lt;br /&gt;Yesterday I chatted about this issue with Gaston Dombiak (Gato from Openfire) and Kevin Smith (Kev from Psi). They are interested in implementing the rest of the XEP, including the part that I explained previously. Of course, this interest is conditioned to the success of the protocol: it must be implemented also by other software, and be widely used.&lt;br /&gt;&lt;br /&gt;So, once a new and updated version of XEP33 is published with the improvements that I proposed to Peter Saint-Andre, I'll file a bug report in the Psi and Openfire bug trackers.&lt;br /&gt;&lt;br /&gt;Until then, I still need to do some cleaning and profiling in mod_multicast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-8300704072060274652?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/8300704072060274652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=8300704072060274652' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/8300704072060274652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/8300704072060274652'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/xep33-implementations-separate-service.html' title='XEP33 implementations: separate service or embedded support?'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-382782088087627515</id><published>2007-08-10T19:59:00.000+02:00</published><updated>2007-08-11T20:41:31.576+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Summary of XEP33 addresses limits</title><content type='html'>This post summarizes and updates all what I have said in the past weeks in those posts: &lt;a href="http://badlop.blogspot.com/2007/07/limit-of-addresses-on-xep33-must-be.html"&gt;The limit of addresses in XEP33 must be fixed&lt;/a&gt;, &lt;a href="http://badlop.blogspot.com/2007/07/xep33-types-of-limits-and-default.html"&gt;XEP33: types of limits and default values&lt;/a&gt;, &lt;a href="http://badlop.blogspot.com/2007/07/xep33-tell-limits-in-discoinfo-response.html"&gt;XEP33: Tell limits in disco#info response using XEP128&lt;/a&gt;, and &lt;a href="http://badlop.blogspot.com/2007/08/modifications-to-xep33-limits-proposal.html"&gt;Updates to XEP33 limits proposal&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introduce the problematic&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's suppose that limiting the number of destination addresses in a XEP33 stanza really serves a purpose, for example, to prevent or reduce abuse of the multicast service. To count how many 'addresses' are there in a stanza, only TO, CC and BCC addresses are considered, since those are the ones that will generate traffic consumption.&lt;br /&gt;&lt;br /&gt;XEP33 says that a server should have a limit for the maximum number of addresses allowed on a single packet: the limit SHOULD be more than 20 and less than 100.&lt;br /&gt;&lt;br /&gt;That limit is easy to implement on the receiving party. But what happens with the sender? How many addresses can a sender put on each packet? If it puts too many, the packet will be rejected. If it puts too few, it is not profiting of XEP33 as much as it could do.&lt;br /&gt;&lt;br /&gt;On the current version of XEP33, remote servers allow as few as 20 and as much as 100 addresses. This means that a sender have to reduce to the minimum common in order to not get rejects: it can only send as much as 20 addresses on each packet.&lt;br /&gt;&lt;br /&gt;If we already know that 20 is the maximum limit in practice, then why bother telling some admins that they can put 30, 40 or more on their servers? Nobody will send more than 20 addresses on each packet!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Proposed solution: configurable limits, and method to inform&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Allow configurable limits on the protocol for each different condition. Define default values in the protocol. And describe a method for senders to know which limits are applied on each destination server.&lt;br /&gt;&lt;br /&gt;Another possible limitations to reduce abuse of a multicast service are # of messages per minute, # of addresses per minute, # of total bytes sent... But I don't expect them to be interesting for inclusion in XEP33.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Types of limits&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Several limits can be defined, depending in the different characteristics of a XEP33 stanza:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sender is: local or remote&lt;/li&gt;&lt;li&gt;the stanza type is: message or presence. Note that iq stanzas don't directly include XEP33 addresses.&lt;/li&gt;&lt;/ul&gt;There is no way to know if a XEP33 was sent by a user or a server/service. So, that categorization is not possible.&lt;br /&gt;&lt;br /&gt;Those categories do not allow to differentiate the stanzas sent by a trusted local service (like MUC or Pub/Sub components) from the rest of possible senders. Obviously, the trusted local services operated by the same administrator that installed the multicast service should have unrestricted access to the multicast service. This possibility is an implementation specific issue which will not be covered by XEP33.&lt;br /&gt;&lt;br /&gt;The mentioned stanza characteristics allow to define 4 different limits:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;local message&lt;/li&gt;&lt;li&gt;local presence&lt;/li&gt;&lt;li&gt;remote message&lt;/li&gt;&lt;li&gt;remote presence&lt;/li&gt;&lt;/ul&gt;The allowed values for the limits are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Positive integers, including zero: 0, 1, 2, ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the key word 'infinite', which means that the limit is not applied at all.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Method to inform&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This method uses &lt;a href="http://www.xmpp.org/extensions/xep-0128.html"&gt;XEP-0128: Service Discovery Extensions&lt;/a&gt;, as proposed by Ralphm in a comment.&lt;br /&gt;&lt;br /&gt;How does this work? Currently, when an entity wants to send a XEP33 stanza, it first checks if there is a XEP33-enabled service available. To check that, it queries disco#info to the service, and looks for &lt;feature var="http://jabber.org/protocol/address"&gt; in the response.&lt;br /&gt;&lt;br /&gt;If there are limits to inform about, the disco#info response does not only announce XEP33 support, but also announce which are the exact limits in effect in the service.&lt;br /&gt;&lt;br /&gt;When a multicast service announces limits in a disco#info response, it SHOULD only report limits which are configured to a different value than the one defined as default in XEP33. So, if XEP33 says that a given limit is 20; but the limit in effect in a server is 30, then the server must tell the limit. If the limit in effect is the default value, then it SHOULD NOT be specified at all in disco#info to save bandwidth.&lt;br /&gt;&lt;br /&gt;Similarly, when a multicast service announces limits in a disco#info response, it SHOULD only report limits which are going to be applied to the entity that performs the request. The reason is that users of the local server and users/servers/services which are remote will have different limits, and it's a waste of bandwidth to announce limits to an entity that will never be affected by them.&lt;br /&gt;&lt;br /&gt;The entity that requested this info must cache those limits for posterior reference.&lt;br /&gt;&lt;br /&gt;Let's see an example. The Jabber server capulet.com wants to send a stanza with XEP33 addresses to the Jabber server shakespeare.lit. The response announces XEP33 support, and also provides information of several limits:&lt;br /&gt;&lt;br /&gt;&lt;/feature&gt;&lt;pre&gt;&amp;lt;iq type='get'&lt;br /&gt;from='capulet.com'&lt;br /&gt;to='shakespeare.lit'&lt;br /&gt;id='disco1'&gt;&lt;br /&gt;&amp;lt;query xmlns='http://jabber.org/protocol/disco#info'/&gt;&lt;br /&gt;&amp;lt;/iq&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;iq type='result'&lt;br /&gt;from='shakespeare.lit'&lt;br /&gt;to='capulet.com'&lt;br /&gt;id='disco1'&gt;&lt;br /&gt;&amp;lt;query xmlns='http://jabber.org/protocol/disco#info'&gt;&lt;br /&gt;&amp;lt;identity&lt;br /&gt;  category='server'&lt;br /&gt;  type='im'&lt;br /&gt;  name='shakespeare.lit jabber server'/&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;feature var='http://jabber.org/protocol/address'/&gt;&lt;br /&gt;&amp;lt;x xmlns='jabber:x:data' type='result'&gt;&lt;br /&gt;&amp;lt;field var='FORM_TYPE' type='hidden'&gt;&lt;br /&gt;  &amp;lt;value&gt;http://jabber.org/protocol/address&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/field&gt;&lt;br /&gt;&amp;lt;field var='message'&gt;&lt;br /&gt;  &amp;lt;value&gt;20&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/field&gt;&lt;br /&gt;&amp;lt;field var='presence'&gt;&lt;br /&gt;  &amp;lt;value&gt;infinite&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/field&gt;&lt;br /&gt;&amp;lt;/x&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/query&gt;&lt;br /&gt;&amp;lt;/iq&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apply limits to incoming stanzas&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When a stanza is received by a XEP33-enabled entity to be routed to other destinations, the number of destination addresses is compared to the limit which is in effect for that kind of stanza. If the stanza has more addresses of type TO, CC and BCC than the allowed, an error message is returned to the original sender.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Take into account limits when sending stanzas&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When any Jabber entity is about to send a XEP33 stanza, it MUST make sure the number of destination addresses is not greater than the limit reported by the destination entity. In this case, the destinations can be split in several groups (or batches).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-382782088087627515?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/382782088087627515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=382782088087627515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/382782088087627515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/382782088087627515'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/summary-of-xep33-addresses-limits.html' title='Summary of XEP33 addresses limits'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6936684045129188077</id><published>2007-08-07T16:33:00.000+02:00</published><updated>2007-08-07T16:47:48.346+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>On travel for the next 3 days</title><content type='html'>This is just to inform that I'll be 'completely away from keyboard' for the next three days. The expected return date is in the evening of 9 August GMT.&lt;br /&gt;&lt;br /&gt;Don't worry about the progress in my GSoC project: I'll carry my hand-written design diagrams of next mod_multicast code I'll write, blank papers, a black pen, a blue pen, and &lt;a href="http://pragmaticprogrammer.com/titles/jaerlang/index.html"&gt;Programming Erlang, Software for a Concurrent World&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6936684045129188077?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6936684045129188077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6936684045129188077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6936684045129188077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6936684045129188077'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/on-travel-for-next-3-days.html' title='On travel for the next 3 days'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5569324893525770632</id><published>2007-08-07T15:29:00.000+02:00</published><updated>2007-08-07T15:47:59.382+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Updates to XEP33 limits proposal</title><content type='html'>I previously proposed some &lt;a href="http://badlop.blogspot.com/2007/07/xep33-types-of-limits-and-default.html"&gt;limits for number of addresses&lt;/a&gt; and &lt;a href="http://badlop.blogspot.com/2007/07/xep33-tell-limits-in-discoinfo-response.html"&gt;how to tell them in disco#info response using XEP128&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All this needs some modifications, which I explain now.&lt;br /&gt;&lt;br /&gt;1. To count how many 'addresses' are there in a stanza, only TO, CC and BCC addresses are considered, since those are the ones that will generate traffic consumption.&lt;br /&gt;&lt;br /&gt;2. When a multicast service announces limits in a disco#info response, it SHOULD only report limits which are configured to a different value than the one defined as default in XEP33. So, if XEP33 says that a given limit is 20; but the limit in effect in a server is 30, then the server must tell the limit. If the limit in effect is the default value, then it SHOULD NOT be specified at all in disco#info to save bandwidth.&lt;br /&gt;&lt;br /&gt;3. Similarly, when a multicast service announces limits in a disco#info response, it SHOULD only report limits which are going to be applied to the entity that performs the request. The reason is that users of the local server and users/servers/services which are remote will have different limits, and it's a waste of bandwidth to announce limits to an entity that will never be affected by them.&lt;br /&gt;&lt;br /&gt;4. The limits that are worth considering can't be categorized in 'user' or 'server', since the multicast service does not have an easy way to know if a stanza was generated by a user or a server. So, the characteristics of a XEP33 stanza that can be used to differentiate them, and apply fine-grained limitations are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sender is: local or remote&lt;/li&gt;&lt;li&gt;the stanza type is: message or presence&lt;/li&gt;&lt;/ul&gt;Those categories do not allow to differentiate the stanzas sent by a trusted local service (like MUC or Pub/Sub components) from the rest of possible senders. Obviously, the trusted local services operated by the same administrator that installed the multicast service should have unrestricted access to the multicast service. This possibility is an implementation specific issue which will not be covered by XEP33.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5569324893525770632?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5569324893525770632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5569324893525770632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5569324893525770632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5569324893525770632'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/modifications-to-xep33-limits-proposal.html' title='Updates to XEP33 limits proposal'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-473396768144796339</id><published>2007-08-06T00:17:00.000+02:00</published><updated>2007-08-06T01:07:13.678+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>GSoC status update: collateral tasks</title><content type='html'>During the last week I haven't dedicated time to code in my GSoC project. Instead, I focused in other stuff not directly related, but that I consider important too.&lt;br /&gt;&lt;br /&gt;I summarized my proposed changes to XEP33 in the &lt;a href="http://wiki.jabber.org/index.php/Extended_Stanza_Addressing_%28XEP-0033%29"&gt;XEP33 wiki page&lt;/a&gt;, and pinged Stpeter to take a look.&lt;br /&gt;&lt;br /&gt;I participated in the discussions in the &lt;a href="http://ejabberd.jabber.ru/mlist"&gt;ejabberd mailing list&lt;/a&gt; about ejabberd project management, release cycle, bug tracker, etc. I hope in the next weeks there will appear documents that describe ejabberd project management, how to submit patches...&lt;br /&gt;&lt;br /&gt;I also started to learn basic &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; usage (it took me a full day to customize it to my needs). I'm a &lt;a href="http://www.vim.org/"&gt;Vim&lt;/a&gt; guy, and I find it better suited for programming, but now I'll use Emacs for SVN tasks. Emacs helps with ChangeLog writing; &lt;a href="http://www.xsteve.at/prg/vc_svn/"&gt;psvn.el&lt;/a&gt; helps with SVN; and &lt;a href="http://www.erlang.org/doc/man/erlang_mode.html"&gt;erlang-mode&lt;/a&gt; provides a standard code indentation system, among other things.&lt;br /&gt;&lt;br /&gt;This week was not completely lost, after all. In fact, GSoC is not only to just 'produce code', but also to learn. And I learned a lot this week.&lt;br /&gt;&lt;br /&gt;Ahh! I also started to practice car driving, for the first time in my life. There isn't a particular reason to learn now and not before. Well, maybe I thought: if I started learning Emacs, why not car driving? Self-learning rules.&lt;br /&gt;&lt;br /&gt;Now it's time for GSoC coding. I'm designing, coding and testing XEP33 addresses limits in ejabberd's mod_multicast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-473396768144796339?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/473396768144796339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=473396768144796339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/473396768144796339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/473396768144796339'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/08/gsoc-status-update-collateral-tasks.html' title='GSoC status update: collateral tasks'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6476921903099366072</id><published>2007-07-30T09:25:00.000+02:00</published><updated>2007-07-30T17:31:59.368+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>XEP33: Tell limits in disco#info response using XEP128</title><content type='html'>Some time ago I explained why &lt;a href="http://badlop.blogspot.com/2007/07/limit-of-addresses-on-xep33-must-be.html"&gt;The limit of addresses in XEP33 must be fixed&lt;/a&gt;. Of the proposed solutions, I prefer #3: 'Configurable limit, and method to inform'.&lt;br /&gt;&lt;br /&gt;A method to inform is using &lt;a href="http://www.xmpp.org/extensions/xep-0128.html"&gt;XEP-0128: Service Discovery Extensions&lt;/a&gt;, as proposed by Ralphm in a comment.&lt;br /&gt;&lt;br /&gt;How does this work? Currently, when an entity wants to send a XEP33 stanza, it first checks if there is a XEP33-enabled service available. To check that, it queries disco#info to the service, and looks for &lt;feature var="http://jabber.org/protocol/address"&gt; in the response.&lt;br /&gt;&lt;br /&gt;If we also use XEP128, the disco#info response will not only announce XEP33 support, but also announce which are the exact limits in effect in the service.&lt;br /&gt;&lt;br /&gt;Let's see an example. The Jabber server capulet.com wants to send a stanza with XEP33 addresses to the Jabber server shakespeare.lit. The response announces XEP33 support, and also provides information of several limits:&lt;br /&gt;&lt;br /&gt;&lt;/feature&gt;&lt;pre&gt;&amp;lt;iq type='get'&lt;br /&gt; from='capulet.com'&lt;br /&gt; to='shakespeare.lit'&lt;br /&gt; id='disco1'&gt;&lt;br /&gt;&amp;lt;query xmlns='http://jabber.org/protocol/disco#info'/&gt;&lt;br /&gt;&amp;lt;/iq&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;iq type='result'&lt;br /&gt; from='shakespeare.lit'&lt;br /&gt; to='capulet.com'&lt;br /&gt; id='disco1'&gt;&lt;br /&gt;&amp;lt;query xmlns='http://jabber.org/protocol/disco#info'&gt;&lt;br /&gt; &amp;lt;identity&lt;br /&gt;     category='server'&lt;br /&gt;     type='im'&lt;br /&gt;     name='shakespeare.lit jabber server'/&gt;&lt;br /&gt; ...&lt;br /&gt; &amp;lt;feature var='http://jabber.org/protocol/address'/&gt;&lt;br /&gt; &amp;lt;x xmlns='jabber:x:data' type='result'&gt;&lt;br /&gt;   &amp;lt;field var='FORM_TYPE' type='hidden'&gt;&lt;br /&gt;     &amp;lt;value&gt;http://jabber.org/protocol/address&amp;lt;/value&gt;&lt;br /&gt;   &amp;lt;/field&gt;&lt;br /&gt;   &amp;lt;field var='limit-remote-user'&gt;&lt;br /&gt;     &amp;lt;value&gt;20&amp;lt;/value&gt;&lt;br /&gt;   &amp;lt;/field&gt;&lt;br /&gt;   &amp;lt;field var='limit-remote-service'&gt;&lt;br /&gt;     &amp;lt;value&gt;100&amp;lt;/value&gt;&lt;br /&gt;   &amp;lt;/field&gt;&lt;br /&gt;   &amp;lt;field var='limit-local-user'&gt;&lt;br /&gt;     &amp;lt;value&gt;300&amp;lt;/value&gt;&lt;br /&gt;   &amp;lt;/field&gt;&lt;br /&gt; &amp;lt;/x&gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/query&gt;&lt;br /&gt;&amp;lt;/iq&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6476921903099366072?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6476921903099366072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6476921903099366072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6476921903099366072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6476921903099366072'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/07/xep33-tell-limits-in-discoinfo-response.html' title='XEP33: Tell limits in disco#info response using XEP128'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-3486782589411289224</id><published>2007-07-28T00:25:00.000+02:00</published><updated>2007-07-30T09:31:01.936+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>XEP33: types of limits and default values</title><content type='html'>I've talked in the past that, if we want to limit the number of destination addresses in a XEP33 stanza, &lt;a href="http://badlop.blogspot.com/2007/07/limit-of-addresses-on-xep33-must-be.html"&gt;we must fix the XEP&lt;/a&gt;. One improvement I propose is to &lt;a href="http://badlop.blogspot.com/2007/07/xep33-tell-limits-in-discoinfo-response.html"&gt;tell the limits in disco#info response using XEP128&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let's suppose that limiting the number of destination addresses in a XEP33 stanza really serves a purpose, for example, to prevent or reduce abuse of the multicast service. If you accept this supposition, then you probably want fine-grained limits, so you can define different limits depending in the sending entity, type of stanza...&lt;br /&gt;&lt;br /&gt;The different characteristics of a XEP33 stanza are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sender is: local or remote&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sender is: user or server/service/component&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the stanza type is: message or presence. Note that iq stanzas don't directly include XEP33 addresses.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There are eight possible permutations, and I associate a limit to each one. Let's review them in detail:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;limit-remote-user-message: A spammer can create accounts in a remote friendly server, and send XEP33 stanzas to our multicast service. I think that if a user wants to use a multicast service, he should ask the administrator of his server to install it, instead of using our multicast service. So, this limit should be 0 by default, which means users of remote servers can't send XEP33 stanzas directly to us.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-remote-user-presence: Same as above, default: 0.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-remote-server-message: There are many reasons for a remote server to send us a message stanza with XEP33 addresses: MUC message, pubsub message, user message... I propose a default limit of 20.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-remote-server-presence: A remote server sends presence stanzas when a user logins, logouts or changes presence.&lt;br /&gt;I consider that presence stanzas are not as annoying as message or iq stanzas. I propose a default limit of 100.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-local-user-message: In a publicly accesible Jabber server with unrestricted account registration (such as jabber.org), spammers can create accounts in jabber.org and use the local multicast service to send spam messages both to local and remote users/servers. I propose a default value of 20.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-local-user-presence: I don't see any reason for a user to send a presence stanza to several destinations. Same as with remote servers, I propose a default limit of 100.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-local-server-message: Obviously, this limit should be infinite always, since a multicast service is expected to trust a local server.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;limit-local-server-presence: Same as above, default: infinite.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Summarizing I propose those limits::&lt;br /&gt;&lt;ul&gt;&lt;li&gt;zero: remote-user-*&lt;br /&gt;&lt;/li&gt;&lt;li&gt;infinite: local-server-*&lt;br /&gt;&lt;/li&gt;&lt;li&gt;variable: remote-server-* and local-user-*&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Once XEP33 defines exact default values, if the limits in a XEP33 deployment are the default values, those limits SHOULD NOT be reported in disco#info responses.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PD: Another possible limitations to reduce abuse of a multicast service are # of messages per minute, # of addresses per minute, # of total bytes sent... But I don't expect them to be interesting for inclusion in XEP33.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-3486782589411289224?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/3486782589411289224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=3486782589411289224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3486782589411289224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3486782589411289224'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/07/xep33-types-of-limits-and-default.html' title='XEP33: types of limits and default values'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5035698265560008090</id><published>2007-07-17T18:36:00.000+02:00</published><updated>2007-07-28T01:45:25.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Midterm GSoC project status, and remaining work</title><content type='html'>The Google Summer of Code program is half way to the end. This is a summary of the accomplished work until now:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implemented or updated several small XEPs in ejabberd: Contact Addresses, Delayed Delivery... Patches are awaiting review and integration in ejabberd.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Implemented XEP33 in a Jabber component for ejabberd. All the code lives in mod_multicast.erl. Code is currently in ejabberd-modules SVN.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Describe Sever Active Multicast&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Describe how to implement XEP33 in the server's C2S.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Added XEP33 support to ejabberd core (sending presence updates). Code in ejabberd-modules SVN.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Describe how to implement XEP33 in a MUC service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Added XEP33 support to ejabberd's mod_muc. Code in ejabberd-modules SVN.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alpha-testing the code with small examples. Fix any bug, improve any potential drawback in the existing code.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The remaining tasks that I'm aware of, from now until the end of my GSoC project are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Discuss improvements in the current XEP33 definition of limits.&lt;/li&gt;&lt;li&gt;Implement the improvements for limits.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Discuss potential security and spam vulnerabilities, and how to prevent them.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Propose improvements for XEP33. Most of the text can be reused from my previous blog posts.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Perform benchmarks to check mod_multicast's effect in CPU, RAM and traffic consumption.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Test compatibility with other XEP33 existing implementations.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add XEP33 support to mod_pubsub and/or mod_pep if their codebase is stable at the time&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write documentation for ejabberd Guide.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Implement or update ejabberd's XEP133 Service Administration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Wait for ejabberd code reviewers, in case I need to fix any problem in my code before commiting to ejabberd.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I weekly update the project timeline. Considering my speed at working, and the difficulty of the remaining tasks, I consider my project to be on track, and will be completed on time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5035698265560008090?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5035698265560008090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5035698265560008090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5035698265560008090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5035698265560008090'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/07/midterm-gsoc-project-status-and.html' title='Midterm GSoC project status, and remaining work'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5972505833011121350</id><published>2007-07-17T01:29:00.000+02:00</published><updated>2007-07-28T01:45:25.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>mod_multicast - Big rewrite: replaced loop with pool</title><content type='html'>During the past days I concentrated in improving a critical part of mod_multicast: the code that checks for protocol support on remote servers.  &lt;br /&gt;&lt;br /&gt;Originally all the processing for a user stanza was done in a single, large, procedural run. This included a loop that slowly checks XEP33 support for each remote server, sends the stanza accordingly, and then proceeds to the next server.&lt;br /&gt;&lt;br /&gt;Now, the loop only sends the stanzas to the servers which support is already known. For the unknown servers, it only sends the iq:query disco#info request, but does not wait for an answer. Instead, the group of destinations related to that server (which are now considered 'Waiters') are temporarily stored in a 'Pool'. Eventually, a server answers, or an error is received; mod_multicast reads from the Pool the Waiters group and finally sends the stanza.&lt;br /&gt;&lt;br /&gt;Future work: I must fix new bugs, related to the new code. Later I'll reconsider if the current Pool needs further changes. And finally, I can go back to &lt;a href="http://badlop.blogspot.com/2007/07/limit-of-addresses-on-xep33-must-be.html"&gt;the XEP33 problem with the addresses limits&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5972505833011121350?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5972505833011121350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5972505833011121350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5972505833011121350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5972505833011121350'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/07/modmulticast-big-rewrite-replaced-loop.html' title='mod_multicast - Big rewrite: replaced loop with pool'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-8770173067398039501</id><published>2007-07-09T20:00:00.000+02:00</published><updated>2007-07-28T01:45:25.724+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>The limit of addresses in XEP33 must be fixed</title><content type='html'>&lt;b&gt;Problem&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;XEP33 says that a server should have a limit for the maximum number of addresses allowed on a single packet: the limit SHOULD be more than 20 and less than 100.&lt;br /&gt;&lt;br /&gt;That limit is easy to implement on the receiving party. But what happens with the sender? How many addresses can a sender put on each packet? If it puts too many, the packet will be rejected. If it puts too few, it is not profiting of XEP33 as much as it could do.&lt;br /&gt;&lt;br /&gt;On the current version of XEP33, remote servers allow as few as 20 and as much as 100 addresses. This means that a sender have to reduce to the minimum common in order to not get rejects: it can only send as much as 20 addresses on each packet.&lt;br /&gt;&lt;br /&gt;If we already know that 20 is the maximum limit in practice, then why bother telling some admins that they can put 30, 40 or more on their servers? Nobody will send more than 20 addresses on each packet!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Proposed solutions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I can see three solutions to the current situation:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Unlimited addresses&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Strict limit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configurable limit, and method to inform&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Since each one has pros and cons, let's see them in more detail.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;#1: Unlimited addresses&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Don't force any limit at all: XEP33 servers must accept a packet with as many addresses as the sender desires. The limit in this case is not imposed by XEP33, but by the server implementation, which usually limits the size of any XMPP packet.&lt;br /&gt;&lt;br /&gt;This solution is the easier of all them to implement.&lt;br /&gt;&lt;br /&gt;This solution can be potentially damaging. For example ejabberd limits the size of any received packet to 64KB. A spammer could construct stanzas with 4KB of message, and 60KB of destination addresses.&lt;br /&gt;In general, the size of an 'address' element is around 50 bytes.&lt;br /&gt;In practice, this allows a spammer to send one packet to a Jabber server that implements XEP33, and the server itself will send 4KB of spam to 1200 local accounts. And all this damage with just a single XMPP stanza.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;#2: Strict limit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Define a strict limit on XEP33, and all senders and receivers must agree. For example 100. This way all Jabber servers, components and clients that implement XEP33 know how much addresses can be send on a packet.&lt;br /&gt;&lt;br /&gt;This solution is easy to understand and to implement.&lt;br /&gt;&lt;br /&gt;However, it limits the power of XEP33 on certain situations. For example, on a restricted and controlled private network where spammers are not an issue, it may be preferable to allow up to 1000 addresses.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;#3: Configurable limit, and method to inform&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Allow a configurable limit on the protocol, for example between 20 and 100, like currently. And describe a method for senders to know which limit is applied on each destination server.&lt;br /&gt;&lt;br /&gt;This solution is the hardest to implement: it makes XEP33 more complex, and requires more code on both senders and receivers. The benefit of this solution is that it allows XEP33 to adapt to different network conditions.&lt;br /&gt;&lt;br /&gt;Some topics that must be addressed if this solution is used:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The disco#info response that reports XEP33 support could indicate the limit:&lt;br /&gt;&amp;lt;feature var='http://jabber.org/protocol/address' limit=50 /&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If a stanza is sent with more than the allowed addresses, the resulting error stanza informs of the limit:&lt;br /&gt;&amp;lt;not-acceptable limit=50 /&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Temporary solution in ejabberd&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Until a definitive solution is adopted for this problem, I implemented in ejabberd the easiest possible solution ever: never send a packet with more than 20 addresses. If this limit is reached, simply send several packets with smaller list of destination addresses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-8770173067398039501?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/8770173067398039501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=8770173067398039501' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/8770173067398039501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/8770173067398039501'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/07/limit-of-addresses-on-xep33-must-be.html' title='The limit of addresses in XEP33 must be fixed'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-2901555452885254598</id><published>2007-07-03T18:09:00.000+02:00</published><updated>2007-07-28T01:45:25.724+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>ejabberd's C2S with XEP33 support</title><content type='html'>I have improved ejabberd's C2S code to use &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt; when the users login, logout or update presence.&lt;br /&gt;&lt;br /&gt;This means that, when a user sends initial presence to login, or logout, or updates his presence, the server instead of sending a single packet to each contact on his roster, tries to send a packet to each destination server.&lt;br /&gt;&lt;br /&gt;As usual, I've commited the change to ejabberd-modules SVN and the changes can be seen here: &lt;a href="https://forge.process-one.net/browse/ejabberd-modules/mod_multicast/trunk/src/ejabberd_c2s.erl?r1=158&amp;r2=163"&gt;ejabberd_c2s.erl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As previously with the &lt;a href="http://badlop.blogspot.com/2007/06/ejabberds-modmuc-with-xep33-support.html"&gt;MUC service&lt;/a&gt;, I followed the &lt;a href="http://badlop.blogspot.com/2007/06/guidelines-for-server-active.html"&gt;Guidelines for Server Active Multicasting on XEP33&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-2901555452885254598?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/2901555452885254598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=2901555452885254598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/2901555452885254598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/2901555452885254598'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/07/ejabberds-c2s-with-xep33-support.html' title='ejabberd&apos;s C2S with XEP33 support'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-1890393106200388657</id><published>2007-06-26T18:58:00.000+02:00</published><updated>2007-07-28T01:45:25.724+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>ejabberd's mod_muc with XEP33 support</title><content type='html'>I have improved mod_muc (ejabberd implementation of &lt;a href="http://www.xmpp.org/extensions/xep-0045.html"&gt;XEP-0045: Multi-User Chat&lt;/a&gt;) to use &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt; in certain situations. This is still preliminary code, and includes some ugly code. But it seems to work.&lt;br /&gt;&lt;br /&gt;Of course I followed the &lt;a href="http://badlop.blogspot.com/2007/06/guidelines-for-server-active.html"&gt;Guidelines for Server Active Multicasting on XEP33&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;As previously mentioned on &lt;a href="http://badlop.blogspot.com/2007/06/multi-user-chat-and-extended-stanza.html"&gt;Multi User Chat and Extended Stanza Addressing&lt;/a&gt;, improving room presence broadcasts to use XEP-33 will be a little difficult. So, for now I concentrated on the easiest and potentially more beneficial improvements: message broadcasts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-1890393106200388657?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/1890393106200388657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=1890393106200388657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/1890393106200388657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/1890393106200388657'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/ejabberds-modmuc-with-xep33-support.html' title='ejabberd&apos;s mod_muc with XEP33 support'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-3157926455257702428</id><published>2007-06-26T18:12:00.000+02:00</published><updated>2007-07-28T01:45:25.724+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Multi User Chat and Extended Stanza Addressing</title><content type='html'>A &lt;a href="http://www.xmpp.org/extensions/xep-0045.html"&gt;Multi-User Chat&lt;/a&gt; service sends a lot of similar messages to a lot of JIDs, so it would seem this service can bastly benefit if using &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;Extended Stanza Addressing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We can group the possible targets in:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sending message broadcasts (section 7.9 of XEP-45)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sending system advisories: change on subject, change on room configuration, system messages (sections 8.1, 10.9)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sending presence broadcasts: join, leave, nick change, granting/removing privileges... (sections 7.1.3, 7.2, 7.3, 7.4, 8.2, 8.3, 8.4, 8.5, 9.1, 9.2, 9.3...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Upgrading a MUC service to send message broadcasts and system message broadcasts using a multicast service (XEP-33) is easy, since the exact same message stanza is sent to all the room occupants.&lt;br /&gt;&lt;br /&gt;However, presence broadcasts are slightly different depending on the room configuration and the destination role and affiliation: on some cases the presence stanza includes additional attributes (jid). So, upgrading a MUC service to send presence broadcasts using a multicast service is slightly more complicated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-3157926455257702428?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/3157926455257702428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=3157926455257702428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3157926455257702428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3157926455257702428'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/multi-user-chat-and-extended-stanza.html' title='Multi User Chat and Extended Stanza Addressing'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6019371907754990013</id><published>2007-06-25T19:38:00.000+02:00</published><updated>2007-07-28T01:45:25.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Guidelines for Server Active Multicasting on XEP33</title><content type='html'>Jabber servers and components sometimes send the same stanza to several destinations. Using &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP33&lt;/a&gt; on such situations they could save traffic. I'll now provide some guidelines to implement that feature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Guidelines&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. If there's a local multicast service, the sender SHOULD send a single stanza with an 'addresses' element as described on XEP33. If no local multicast is available, obviously it MUST send multiple stanzas as usual.&lt;br /&gt;&lt;br /&gt;2. Each desired destination address must be included as an 'address' element, as a child of the 'addresses' element, as described on XEP33.&lt;br /&gt;&lt;br /&gt;3. All the 'address' elements MUST include the attribute 'jid'. It is not allowed to use the attribute 'uri'.&lt;br /&gt;&lt;br /&gt;4. All the 'address' elements MUST include the attribute 'type' with value 'bcc'. It is not allowed to put any other value on this attribute.&lt;br /&gt;&lt;br /&gt;5. All the 'address' elements SHOULD NOT include any other attribute, since they will never be presented to the destination entity.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On this example I'll show how a MUC service that follows the proposed guidelines sends a message to all the occupants of a room.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scenario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On this example, I suppose those JIDs, which are described on&lt;br /&gt;&lt;a href="http://www.xmpp.org/extensions/xep-0045.html#terms-personae"&gt;XEP45 sec. 4.3&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the Jabber server: shakespeare.lit&lt;/li&gt;&lt;li&gt;the multicast service: multicast.shakespeare.lit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the MUC service: macbeth.shakespeare.lit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the room: darkcave@macbeth.shakespeare.lit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the room occupants:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;crone1@shakespeare.lit/desktop&lt;/li&gt;&lt;li&gt;wiccarocks@shakespeare.lit/laptop&lt;br /&gt;&lt;/li&gt;&lt;li&gt;hag66@shakespeare.lit/pda&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Without XEP33&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The section &lt;a href="http://www.xmpp.org/extensions/xep-0045.html#message"&gt;7.9 Sending a Message to All Occupants&lt;/a&gt; on XEP45 shows a room occupant that sends a message to the room. Then, the MUC service sends this message to all the room occupants.&lt;br /&gt;&lt;br /&gt;The example 60 shows the three stanzas sent by the MUC service to the room occupants:&lt;br /&gt;&lt;pre&gt;&amp;lt;message&lt;br /&gt;  from='darkcave@macbeth.shakespeare.lit/thirdwitch'&lt;br /&gt;  to='crone1@shakespeare.lit/desktop'&lt;br /&gt;  type='groupchat'&gt;&lt;br /&gt;&amp;lt;body&gt;Harpier cries: 'tis time, 'tis time.&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/message&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;message&lt;br /&gt;  from='darkcave@macbeth.shakespeare.lit/thirdwitch'&lt;br /&gt;  to='wiccarocks@shakespeare.lit/laptop'&lt;br /&gt;  type='groupchat'&gt;&lt;br /&gt;&amp;lt;body&gt;Harpier cries: 'tis time, 'tis time.&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/message&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;message&lt;br /&gt;  from='darkcave@macbeth.shakespeare.lit/thirdwitch'&lt;br /&gt;  to='hag66@shakespeare.lit/pda'&lt;br /&gt;  type='groupchat'&gt;&lt;br /&gt;&amp;lt;body&gt;Harpier cries: 'tis time, 'tis time.&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/message&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;With XEP33&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If the MUC service supports XEP33, instead of sending three similar stanzas it sends only one to the multicast service:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;message&lt;br /&gt;  from='darkcave@macbeth.shakespeare.lit/thirdwitch'&lt;br /&gt;  to='multicast.shakespeare.lit'&lt;br /&gt;  type='groupchat'&gt;&lt;br /&gt;&amp;lt;body&gt;Harpier cries: 'tis time, 'tis time.&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;addresses xmlns='http://jabber.org/protocol/address'&gt;&lt;br /&gt;   &amp;lt;address type='bcc' jid='crone1@shakespeare.lit/desktop'/&gt;&lt;br /&gt;   &amp;lt;address type='bcc' jid='wiccarocks@shakespeare.lit/laptop'/&gt;&lt;br /&gt;   &amp;lt;address type='bcc' jid='hag66@shakespeare.lit/pda'/&gt;&lt;br /&gt;&amp;lt;/addresses&gt;&lt;br /&gt;&amp;lt;/message&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6019371907754990013?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6019371907754990013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6019371907754990013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6019371907754990013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6019371907754990013'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/guidelines-for-server-active.html' title='Guidelines for Server Active Multicasting on XEP33'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5174451261050997277</id><published>2007-06-24T18:27:00.000+02:00</published><updated>2007-07-28T01:45:25.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>XEP33 and Server Active Multicasting</title><content type='html'>&lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP-0033: Extended Stanza Addressing&lt;/a&gt; specifies how Jabber entities can define multiple destination addresses on a XMPP stanza.&lt;br /&gt;&lt;br /&gt;This is interesting when a user wants the destinations to know that he sent the same message to all the other destinations (Carbon Copy), or to send a copy to a supervising user (Blind Carbon Copy). The current version of XEP33 explains this basic usage, including an example.&lt;br /&gt;&lt;br /&gt;XEP33 can also be used by Jabber servers, MUC services... to reduce bandwidth consumption. This possibility is hinted on the introduction of XEP33, but is not further described on the content of the document. I call this usage &lt;span style="font-weight: bold;"&gt;Server Active Multicasting&lt;/span&gt;, since the server (or a server component) is actively determined to use multicasting, and instead of sending individual stanzas to each destination, tries to send stanzas to groups of users.&lt;br /&gt;&lt;br /&gt;There are many opportunities on the server side to use XEP33 to reduce traffic, for example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the Jabber/XMPP server: to send presence changes&lt;/li&gt;&lt;li&gt;MUC service: to send chatroom messages, subject changes, presence changes, join, leaves, nick changes...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pubsub/PEP service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Subscription/group list service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;RSS transport&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As part of my GSoC project, my next steps are to define some guidelines to implement&lt;br /&gt;Server Active Multicasting. And of course implement this on ejabberd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5174451261050997277?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5174451261050997277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5174451261050997277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5174451261050997277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5174451261050997277'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/xep33-and-server-active-multicasting.html' title='XEP33 and Server Active Multicasting'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6858650195747020296</id><published>2007-06-19T19:29:00.000+02:00</published><updated>2007-07-28T01:45:25.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>mod_multicast: completed XEP33 support</title><content type='html'>During the past week I fixed several small problems on the source code of mod_multicast:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Periodically remove from the cache those items that are really old.&lt;/li&gt;&lt;li&gt;If the packet has wrong xmlns, no 'addresses' or no 'address', it now rejects to process the packet and reports an error to the sender.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fixed reception of IQ Query packets. This topic deserves a blog post, even a documentation section.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Added support for XEP-0092: Software Version. Currently it shows the SVN revision.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I verified that mod_multicast does not interfere with Privacy Lists. I initially thought that problem could appear when sending a multicast packet internally on ejabberd. Actually, everything seems to work correctly.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So now I consider the implementation of mod_multicast to be completed. At least it supports XEP-33 v1.1.&lt;br /&gt;&lt;br /&gt;The next steps are: active server multicast, and abuse/spam prevention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6858650195747020296?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6858650195747020296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6858650195747020296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6858650195747020296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6858650195747020296'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/modmulticast-completed-xep33-support.html' title='mod_multicast: completed XEP33 support'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-4619532873946090873</id><published>2007-06-16T18:24:00.000+02:00</published><updated>2007-07-28T01:45:25.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Packet Relay? No, thanks</title><content type='html'>During my development of a multicast service for &lt;a href="http://ejabberd.jabber.ru/"&gt;ejabberd&lt;/a&gt; that implements &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;XEP33: Extended Stanza Addressing&lt;/a&gt;, I found a phrase that catch my attention:&lt;br /&gt;&lt;blockquote&gt;The server MAY choose to limit whether non-local servers can send address headers that require the local server to send to third parties (relaying).&lt;/blockquote&gt;Packet relay: server A wants to send a packet to server B. Instead of simply doing that, he sends a packet to server C requesting him to resend it (relay it) to server B.&lt;br /&gt;&lt;br /&gt;Why should a public Jabber server accept orders from another Jabber server to send packets to a third Jabber server?&lt;br /&gt;&lt;br /&gt;This feature may or may not be useful on open networks (like the &lt;a href="http://www.xmpp.net/"&gt;XMPP Federation&lt;/a&gt;), and may or may not on private networks. But I think that packet relay does not solve any critical problem right now, and instead it brings many new undesired problems.&lt;br /&gt;&lt;br /&gt;Just to name one problem related to packet relay: abuse to send spam. You just need to see what happened to email relay.&lt;br /&gt;&lt;br /&gt;I've removed all support for packet relay on my implementation for ejabberd. I proposed to describe packet relay support as an optional feature on XEP33, and discourage its usage on open networks.&lt;br /&gt;&lt;br /&gt;If a server developer wants to implement it, ok, implement it. If a Jabber server admin needs that feature for some reason on his private network, ok, enable it. But I think there are more important features that I must implement during this GSoC project than packet relay.&lt;br /&gt;&lt;br /&gt;Please post a comment if you would like to have packet relay support on ejabberd's multicast service. If so, explain why you find that feature useful.&lt;br /&gt;&lt;br /&gt;Related links: &lt;a href="http://www.jabber.org/muc-logs/jdev@conference.jabber.org/2007-06-12.html#12:28:41"&gt;MUC logs&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-4619532873946090873?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/4619532873946090873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=4619532873946090873' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/4619532873946090873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/4619532873946090873'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/packet-relay-no-thanks.html' title='Packet Relay? No, thanks'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5080122426497524895</id><published>2007-06-09T00:17:00.000+02:00</published><updated>2007-07-28T01:45:25.726+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Extended Stanza Addressing: initial commit to SVN</title><content type='html'>I've sent to ejabberd-modules SVN the initial commit of &lt;a href="http://ejabberd.jabber.ru/mod_multicast"&gt;mod_multicast&lt;/a&gt;, the module for ejabberd that implements &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;Extended Stanza Addressing (XEP-33)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's an independent component. It only acts passively: when a user or server sends a packet, it checks and routes. &lt;br /&gt;&lt;br /&gt;This version implements almost all the tasks described on the protocol: wait for packets, query other servers and components for support, cache responses, verify age of cache responses, check packet syntax and route to final destinations, either local or remote.&lt;br /&gt;&lt;br /&gt;I think the only missing feature is to clean the cache every X time. After that, I want to verify the access control works correctly both for local users and remote users/servers.&lt;br /&gt;&lt;br /&gt;Implementing XEP33 is not the end of my project. It seems that's only the beginning: that XEP needs some parts to be rewritten, and several aspects to be added. For example, error reporting; how exactly to use with MUC and Pub-Sub.&lt;br /&gt;&lt;br /&gt;There isn't yet a public dummy server where people can try the implementation. For now, you can get the code from SVN, compile, install on your ejabberd server and try. Please don't use this on a production server! Tobias Markmann has already commented that will try it. /me crosses fingers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5080122426497524895?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5080122426497524895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5080122426497524895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5080122426497524895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5080122426497524895'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/06/extended-stanza-addressing-initial.html' title='Extended Stanza Addressing: initial commit to SVN'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5770396014946951737</id><published>2007-05-27T00:07:00.000+02:00</published><updated>2007-08-07T16:34:42.029+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Returned from Canada</title><content type='html'>I've returned from my travel. It was nice. Almost a perfect travel: no baggage lost, no plane crash on a lonely island...&lt;br /&gt;&lt;br /&gt;I even got a surprise on the conference where I presented my paper: I received a 'Nokia Student Travel Award'!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5770396014946951737?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5770396014946951737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5770396014946951737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5770396014946951737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5770396014946951737'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/05/returned-from-canada.html' title='Returned from Canada'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5185281814437095539</id><published>2007-05-17T19:18:00.000+02:00</published><updated>2007-08-07T16:34:36.607+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>PhD travel since 18 to 26 May</title><content type='html'>I'll be on travel since 18 to 26, May 2007.&lt;br /&gt;&lt;br /&gt;This was already planned on my GSoC project timeline. Work directly related on XEP-33 will start on 28 May, as planned.&lt;br /&gt;&lt;br /&gt;Ah, I forgot to mention. I'll be on Toronto, Canada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5185281814437095539?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5185281814437095539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5185281814437095539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5185281814437095539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5185281814437095539'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/05/phd-travel-since-18-to-26-may.html' title='PhD travel since 18 to 26 May'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-3524627463678330257</id><published>2007-05-17T18:59:00.000+02:00</published><updated>2007-07-28T01:45:25.727+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Completed XEP-0157 and XEP-0203</title><content type='html'>I've published the first results of my GSoC project.&lt;br /&gt;&lt;br /&gt;The task consisted on adding or updating support for two protocols on ejabberd:&lt;br /&gt;XEP-0157: Contact Addresses for XMPP Services&lt;br /&gt;XEP-0203: Delayed Delivery&lt;br /&gt;&lt;br /&gt;The objective of this task was to get some experience reading XEPs. The coding part was easy, since both protocols were rather small and easy to implement. So, I decided to update also some related code.&lt;br /&gt;&lt;br /&gt;More info and patch downloads: &lt;a href="https://support.process-one.net/browse/EJAB-235"&gt;XEP-0157&lt;/a&gt; and &lt;a href="https://support.process-one.net/browse/EJAB-234"&gt;XEP-0203&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The plan is to commit those patches to ejabberd SVN soon, even before GSoC finishes. I hope there aren't bugs. Otherwise, please comment it here or on the bug tracker.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-3524627463678330257?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/3524627463678330257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=3524627463678330257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3524627463678330257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/3524627463678330257'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/05/completed-xep-0157-and-xep-0203.html' title='Completed XEP-0157 and XEP-0203'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5341191610578628448</id><published>2007-05-09T19:40:00.000+02:00</published><updated>2007-08-14T19:48:17.178+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Project Timeline</title><content type='html'>The project timeline is grouped in weeks, which start on Monday. Each week has a clear and independent task, which must be finished before the end of the week. Some task description are a little vague yet. I'll update this timeline as work progresses.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;April 30&lt;/span&gt; - Completed&lt;br /&gt;Read the protocols, understand and clarify all the initial doubts. Will also serve to get contact with my mentor, the XEP author, the standard mailing list and maybe other implementors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;May 7&lt;/span&gt; - Completed&lt;br /&gt;Smaller XEPs: check which parts of them are already implemented, and whether they require an update.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;May 14&lt;/span&gt; - &lt;a href="http://badlop.blogspot.com/2007/05/completed-xep-0157-and-xep-0203.html"&gt;Completed&lt;/a&gt;&lt;br /&gt;Start coding: Implement Contact Addresses and Delayed Delivery.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;May 21&lt;/span&gt; - &lt;a href="http://badlop.blogspot.com/2007/05/returned-from-canada.html"&gt;Completed&lt;/a&gt;&lt;br /&gt;PhD travel&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;May 28&lt;/span&gt; - Completed&lt;br /&gt;Initial design of the XEP-33 component.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Juny 4&lt;/span&gt; - &lt;a href="http://badlop.blogspot.com/2007/06/extended-stanza-addressing-initial.html"&gt;Completed&lt;/a&gt;&lt;br /&gt;Start implementation of XEP-33. Publish first version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Juny 11&lt;/span&gt; - &lt;a href="http://badlop.blogspot.com/2007/06/modmulticast-completed-xep33-support.html"&gt;Completed&lt;/a&gt;&lt;br /&gt;Test code for bugs. Discuss error handling, relay support. Update code accordingly if only minor changes are required.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Juny 18&lt;/span&gt; - Completed: &lt;a href="http://badlop.blogspot.com/2007/06/xep33-and-server-active-multicasting.html"&gt;SAM&lt;/a&gt;,  &lt;a href="http://badlop.blogspot.com/2007/06/guidelines-for-server-active.html"&gt;guidelines for SAM&lt;/a&gt;, &lt;a href="http://badlop.blogspot.com/2007/06/multi-user-chat-and-extended-stanza.html"&gt;MUC +SAM ideas&lt;/a&gt;&lt;br /&gt;Design guidelines for active server multicasting, and try to implement on mod_muc for testing purposes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Juny 25&lt;/span&gt; - Completed: &lt;a href="http://badlop.blogspot.com/2007/06/ejabberds-modmuc-with-xep33-support.html"&gt;mod_muc&lt;/a&gt; and &lt;a href="http://badlop.blogspot.com/2007/07/ejabberds-c2s-with-xep33-support.html"&gt;C2S&lt;/a&gt;&lt;br /&gt;Add XEP-33 support to mod_muc.&lt;br /&gt;Add XEP-33 support to ejabberd core (sending presence updates).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;July 2&lt;/span&gt; - Completed&lt;br /&gt;Review for bugs, compliance. Try to fix code ugliness.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;July 9&lt;/span&gt; - Completed: &lt;a href="http://badlop.blogspot.com/2007/07/modmulticast-big-rewrite-replaced-loop.html"&gt;loop -&gt; pool&lt;/a&gt;&lt;br /&gt;Continue with review of existing code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;July 16&lt;/span&gt; - Completed&lt;br /&gt;Propose addresses limits in XEP33:&lt;br /&gt;&lt;a href="http://badlop.blogspot.com/2007/07/limit-of-addresses-on-xep33-must-be.html"&gt;The limit of addresses in XEP33 must be fixed&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;July 23&lt;/span&gt; - Completed&lt;br /&gt;&lt;a href="http://badlop.blogspot.com/2007/07/xep33-types-of-limits-and-default.html"&gt;XEP33: types of limits and default values&lt;/a&gt;&lt;br /&gt;&lt;a href="http://badlop.blogspot.com/2007/07/xep33-tell-limits-in-discoinfo-response.html"&gt;XEP33: Tell limits in disco#info response using XEP128&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;July 30&lt;/span&gt; - &lt;a href="http://badlop.blogspot.com/2007/08/gsoc-status-update-collateral-tasks.html"&gt;Completed&lt;/a&gt;&lt;br /&gt;Learn to use Emacs, psvn and ChangeLog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;August 6&lt;/span&gt; - Completed&lt;br /&gt;Implement limits in addresses.&lt;br /&gt;&lt;a href="http://badlop.blogspot.com/2007/08/modifications-to-xep33-limits-proposal.html"&gt;Updates to XEP33 limits proposal&lt;/a&gt;&lt;br /&gt;Write documentation for the ejabberd guide.&lt;br /&gt;Test compatibility with other software: Openfire, Tkabber, Psi,.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;August 13&lt;/span&gt; - On progress&lt;br /&gt;Implement as much as possible of XEP-0133 Service Administration.&lt;br /&gt;Code profiling to find bottlenecks and deficiencies in mod_multicast.&lt;br /&gt;XEP33 protocol update (chat with Stpeter)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;August 20&lt;/span&gt; -&lt;br /&gt;Perform benchmarks (chat with Mremond).&lt;br /&gt;Upload final code to Google Summer of Code hosting.&lt;br /&gt;Prepare and submit patches to ejabberd bug tracker.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tasks that will be addressed at a later time&lt;br /&gt;&lt;/span&gt;Add XEP-33 support to ejabberd's Pub/Sub service (talk with Aleksey and Legoscia).&lt;br /&gt;Discuss potential security and spam vulnerabilities (talk in JDEV and JADMIN mailint lists).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5341191610578628448?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5341191610578628448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5341191610578628448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5341191610578628448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5341191610578628448'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/05/project-timeline.html' title='Project Timeline'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6830150042521465564</id><published>2007-04-20T18:31:00.000+02:00</published><updated>2007-07-28T01:46:55.811+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>¡Propuesta aceptada en GSoC 07!</title><content type='html'>La propuesta de proyecto que envié al Google Summer of Code 2007 ha sido aceptada.&lt;br /&gt;&lt;br /&gt;Eso significa que este verano (desde junio hasta agosto incluidos) trabajaré en dicho proyecto y seré convenientemente remunerado. O sea, que me pagan por trabajar: 4500 USD, al cambio unos 3300€, antes de impuestos.&lt;br /&gt;&lt;br /&gt;El proyecto consiste principalmente en implementar Extended Stanza Addressing en &lt;a href="http://ejabberd.jabber.ru/"&gt;Ejabberd&lt;/a&gt;. Lo primero es un protocolo que permite enviar el mismo 'stanza' a mucha gente y lo segundo es un servidor de mensajería instantánea Jabber/XMPP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6830150042521465564?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6830150042521465564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6830150042521465564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6830150042521465564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6830150042521465564'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/04/propuesta-aceptada-en-gsoc-07.html' title='¡Propuesta aceptada en GSoC 07!'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-6906039177043886529</id><published>2007-04-17T19:30:00.000+02:00</published><updated>2007-07-28T01:45:25.728+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>What we expect from a GSoC student</title><content type='html'>I found &lt;a href="http://moinmoin.wikiwikiweb.de/GoogleSoc2007"&gt;some recommendations&lt;/a&gt; for GSoC developers, which may seem obvious, but are quite useful:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;What we expect&lt;br /&gt;&lt;br /&gt;   * CODE:&lt;br /&gt; - Clean (see CodingStyle).&lt;br /&gt; - Working (try to do small changes, step by step, returning to a working state as often as possible).&lt;br /&gt; - Tested (setup a local test wiki, write unit tests, ...).&lt;br /&gt;&lt;br /&gt;   * DOCS:&lt;br /&gt; - For developers (e.g. docstrings)&lt;br /&gt; - For users (where appropriate - e.g. as CHANGES entries or Help* wiki pages).&lt;br /&gt;&lt;br /&gt;   * Regular communication:&lt;br /&gt; - Stay online on #moin-dev.&lt;br /&gt; - Talk about your plans and what you do.&lt;br /&gt; - Ask for help if you are blocked.&lt;br /&gt;&lt;br /&gt;   * Regular work:&lt;br /&gt; - Citing Google: "your main activity for the summer".&lt;br /&gt; - There must be at least 1 push to your public repo for each day you worked on your project (try to do clean commits, 1 commit per feature / per sub task).&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-6906039177043886529?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/6906039177043886529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=6906039177043886529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6906039177043886529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/6906039177043886529'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/04/what-we-expect-from-gsoc-student.html' title='What we expect from a GSoC student'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-5696656820597477801</id><published>2007-04-15T23:11:00.000+02:00</published><updated>2007-07-28T01:45:25.728+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Project Description</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Title:&lt;/span&gt; Implement XEP-33 Extended Stanza Addressing and other XEPs on ejabberd&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Organization:&lt;/span&gt; XMPP Standards Foundation&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Student:&lt;/span&gt; Bernardo Antonio de la Ossa Pérez&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mentor:&lt;/span&gt; Mickaël Rémond&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Abstract:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I propose to implement 'XEP-0033 Extended Stanza Addressing' as a component on ejabberd. This protocol aims to reduce traffic between Jabber servers when both of them support the protocol, and the clients send broadcast messages. ejabberd's MUC and PubSub components will be updated to use this protocol.&lt;br /&gt;&lt;br /&gt;This protocol is already used on several Jabber servers and clients. Implementing it on ejabberd is an important step on the adoption process.&lt;br /&gt;&lt;br /&gt;To allow me to get some experience on XEP-reading and implementation, I also propose to implement (or update) three smaller protocols on ejabberd, namely:&lt;br /&gt;XEP-0133: Service Administration&lt;br /&gt;XEP-0157: Contact Addresses for XMPP Services&lt;br /&gt;XEP-0203: Delayed Delivery&lt;br /&gt;&lt;br /&gt;With this project, ejabberd will provide more features and the existing features will be better protocol-compliant. Jabber as a whole will benefit with ejabberd support of extended stanza addressing. And finally, I'll get valuable experience on protocol implementation and knowledge on XMPP internals.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Detailed description:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The main purpose of this proposal is to write a module for ejabberd that implements 'XEP-0033 Extended Stanza Addressing' as a component. This XEP can reduce traffic on certain situations, as it allows Jabber entities to specify several recipients on a single XMPP message. Instead of sending a stanza for each user, a single stanza can be sent specifying all the destination addresses.&lt;br /&gt;&lt;br /&gt;The MUC and PubSub components included on ejabberd will be updated to support Extended Stanza Addressing. Optimization of bandwidth for MUC is one of the main arguments used against MUC usage over IRC. Hence, this proposal will help spread MUC and thus XMPP use.&lt;br /&gt;&lt;br /&gt;This extension requires implementation both on client and servers. Some Open Source programs already implement it: OpenFire server and Psi 0.11 client. Several big public and federated Jabber servers use ejabberd (including jabber.org and jabber.ru). Hence, I expect the addition of this XEP to ejabberd will provide a noticeable reduction on general bandwidth consumption and will incentive other client and servers developers to support it.&lt;br /&gt;&lt;br /&gt;By using Epeios, this ejabberd component could be ran with any Jabber server, for example jabberd14 or jabberd2.&lt;br /&gt;&lt;br /&gt;The second part of my proposal is to finish the implementation of three more XEPs, which are already partially implemented, but based on early versions of those XEPs, or even before the related XEPs were written.&lt;br /&gt;&lt;br /&gt;The protocols I've selected for this part are:&lt;br /&gt;XEP-0133: Service Administration&lt;br /&gt;XEP-0157: Contact Addresses for XMPP Services&lt;br /&gt;XEP-0203: Delayed Delivery&lt;br /&gt;I'll now comment them in more detail.&lt;br /&gt;&lt;br /&gt;ejabberd already implements some service administration commands. However, they are direct migration from a very early administration protocol written by Alexey Shchepin back in 2003. My task is to verify that the current implementation adheres to the protocol, and add the remaining commands. On the client part, this protocol requires XEP-04 data forms and XEP-50 ad-hoc commands, which are already implemented on several Jabber clients, including Psi 0.11, Gajim, and Tkabber.&lt;br /&gt;&lt;br /&gt;Regarding 'XEP-0157: Contact Addresses for XMPP Services', this is a very small protocol. I'll use it to get some experience in XEP-reading before I focus on the larger parts of my proposal.&lt;br /&gt;&lt;br /&gt;Finally, ejabberd is said to implement 'XEP-0091: Delayed Delivery'. My task on this respect is to update the current implementation to XEP-0203. This should be the next step on my learning phase.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Benefits to Community:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My proposal consists on implementing or updating some useful protocols on ejabberd, a widely deployed and used Jabber server. This proposal helps to reduce the bandwidth consumption both on the local Jabber server and the remote one. Its integration into the MUC component will benefit it over IRC.&lt;br /&gt;&lt;br /&gt;Additionally, this component will be pluggable to other Jabber servers like jabberd14 and jabberd2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Deliverables:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;During April and May: 'Read, understand and design'&lt;br /&gt;- Read the protocols, understand and clarify all the initial doubts. Will also serve to get contact with my mentor, the XEP author, the standard mailing list and maybe other implementors.&lt;br /&gt;- Initial design of the XEP-33 component.&lt;br /&gt;- Regarding the other smaller XEPs: check which parts of them are already implemented, and whether they require an update.&lt;br /&gt;At the end of this preliminary phase I have perfectly understood the four protocols, I know what needs to be done, and how to do it.&lt;br /&gt;&lt;br /&gt;First week of June: 'Implement Contact Addresses and Delayed Delivery'&lt;br /&gt;At the end of the week I have finished implementing Contact Addresses, and updated ejabberd implementation of Delayed Delivery. The code is tested and marked as finished.&lt;br /&gt;&lt;br /&gt;From second week of June until second week of July: 'Implement Extended Stanza Addressing'&lt;br /&gt;Implement the full component. Test it with other implementations. At the end of this phase, the component should provide full support for the protocol, and be completely debugged and stable.&lt;br /&gt;&lt;br /&gt;Third and fourth weeks of July: 'Give additional features'&lt;br /&gt;Once the component is stable, I'll update ejabberd modules mod_muc and mod_pubsub to use XEP-33 whenever possible.&lt;br /&gt;At the end of this phase, the implementation of XEP-33 is finished.&lt;br /&gt;&lt;br /&gt;First and second week of August: 'Implement Service Administration'&lt;br /&gt;First, I'll update the existing commands to the protocol. Once all the existing code is acceptable, implement the remaining commands. At the end of this phase the service administration module is marked as finished.&lt;br /&gt;&lt;br /&gt;Third week of August:&lt;br /&gt;If I carry all the previous phases on time, I have a full week to write developer documents. In them I'd describe the API, and how to use it of the ejabberd ad-hoc commands and data forms implementation.&lt;br /&gt;&lt;br /&gt;When Summer of Code ends, I hope my work is reviewed and included on mainstream ejabberd. Of course, I'll be available to fix any bugs that may be found on the future.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Open Source experience:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A summary of my involvement in Jabber projects:&lt;br /&gt;&lt;br /&gt;Cofounder of the spanish Jabber site jabberes.org, coadministrator of the Jabber server, Drupal administrator, content writer (since Sep 2003)&lt;br /&gt;&lt;br /&gt;Involved in Tkabber since Dec 2003: Drupal administrator, tutorial writer, bug reporter, spanish translator, packager of Tkabber-Pack and Tkabber-Starpack.&lt;br /&gt;&lt;br /&gt;Involved in ejabberd since Oct 2004: Drupal administrator, tutorial writer, code contributions, and technical assistance on ejabberd's web forum, mailing list and chatroom.&lt;br /&gt;&lt;br /&gt;I was once contracted to develop a small module, later published as GPL [3]. My contractor was so happy with the service that payed me a small plus over the initially negotiated amount.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why do I want to work on this particular project?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've written several modules or patches for ejabberd since 2004. However, all of them focus on making the administration tasks easier and are not XMPP-related at all. Examples are: logging (messages, chatrooms to HTML and XML), new means of administration (XML-RPC, command line), automated password recovery, statistics gathering...&lt;br /&gt;&lt;br /&gt;Until now I've avoided protocol implementation. With this proposal I'll get valuable knowledge and experience on this subject. So, after this project I will be able to contribute not only on interface tasks, but also protocol ones both as ejabberd core code and external components that are usable by any Jabber server.&lt;br /&gt;&lt;br /&gt;I don't plan to get employment, class-taking, or any other task that may conflict with this project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Education:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I obtained BEng on Technical Engineering in System Data Processing at the School of Computer Science at the Polytechnic University of Valencia (Sep 1997 - July 2000). Later followed my studies and obtained the M. Sc. on Computer Science Engineering at the Faculty of Computer Science at the same university (Sep 2000 - July 2003).&lt;br /&gt;&lt;br /&gt;Currently I'm half-way on my Ph. D. thesis work on Computer Science on the Department of Systems Data Processing and Computers at the same university. My main research interest is web prefetching techniques. I've developed a complete environment to test and benchmark such techniques in real-world circumstances. This environment is written in Erlang, is highly parametrizable, provides many types of performance statistics and can be used on real scenarios.&lt;br /&gt;&lt;br /&gt;I've published several papers related to web architecture and web prefetching.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://ejabberd.jabber.ru/mod_muc_log"&gt;http://ejabberd.jabber.ru/mod_muc_log&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://ejabberd.jabber.ru/mod_ctlextra"&gt;http://ejabberd.jabber.ru/mod_ctlextra&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://ejabberd.jabber.ru/mod_muc_log_xml"&gt;http://ejabberd.jabber.ru/mod_muc_log_xml&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-5696656820597477801?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/5696656820597477801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=5696656820597477801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5696656820597477801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/5696656820597477801'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/04/project-description.html' title='Project Description'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3367089818389183575.post-9216835866620541766</id><published>2007-04-13T23:06:00.000+02:00</published><updated>2007-07-28T01:45:25.728+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>Proposal accepted at GSoC 07!</title><content type='html'>So, my proposal was accepted at &lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code 2007&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;During this summer I will implement &lt;a href="http://www.xmpp.org/extensions/xep-0033.html"&gt;Extended Stanza Adressing&lt;/a&gt; on ejabberd. Since I don't have experience on protocol implementation, I will first experiment implementing/updating smaller protocols, like &lt;a href="http://www.xmpp.org/extensions/xep-0203.html"&gt;Delayed Delivery&lt;/a&gt; and &lt;a href="http://www.xmpp.org/extensions/xep-0157.html"&gt;Contact Addresses for XMPP Services&lt;/a&gt;. Finally, if I have enought time at the end of summer, I'll update the current implementation of &lt;a href="http://www.xmpp.org/extensions/xep-0133.html"&gt;Service Administration&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;With all this work I will not only add some features to a widely used Jabber server, but also get more knowledge of XMPP internals, I'll get more involved on the XSF, and will experiment on Erlang and ejabberd coding.&lt;br /&gt;&lt;br /&gt;Extended Stanza Addressing does not only reduce bandwidth usage on the local Jabber server, but also on the destination servers. So adding support for this to ejabberd will benefit the wide federated XMPP network. Or something like that... ;)&lt;br /&gt;&lt;br /&gt;The posts related to this project will have &lt;a href="http://badlop.blogspot.com/search/label/gsoc"&gt;gsoc&lt;/a&gt; tag, and &lt;a href="http://badlop.blogspot.com/feeds/posts/default/-/gsoc"&gt;this is the gsoc RSS feed&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3367089818389183575-9216835866620541766?l=badlop.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://badlop.blogspot.com/feeds/9216835866620541766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3367089818389183575&amp;postID=9216835866620541766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/9216835866620541766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3367089818389183575/posts/default/9216835866620541766'/><link rel='alternate' type='text/html' href='http://badlop.blogspot.com/2007/04/my-proposal-was-accepted-at-google.html' title='Proposal accepted at GSoC 07!'/><author><name>badlop</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
