<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[Erlang Developers Home]]></title>
  <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com"/>
  <link rel="self" type="application/atom+xml" href="http://syndication.splinder.com/erlangdevelopers/atom.xml" />
  <updated>2008-05-30T11:28:29+02:00</updated>
  <subtitle type="html"><![CDATA[The First Erlang Developers Social Group Ever!]]></subtitle>
  <rights>Copyright (c) 2001-2006, Tipic Inc.</rights>
<id>http://erlangdevelopers.splinder.com/</id>
  <author>
  <name>loretoparisi</name>
  <uri>http://loretoparisi.splinder.com</uri>
  </author>
  <entry>
    <title type="html"><![CDATA[Programming Erlang, Software for A Concurrent World]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/17296208/Programming+Erlang%2C+Software+f" />
    <id>http://erlangdevelopers.splinder.com/post/17296208/Programming+Erlang%2C+Software+f</id>
    <published>2008-05-30T11:28:29+02:00</published>
    <updated>2008-05-30T11:28:29+02:00</updated>
    <author>
      <name>loretoparisi</name>
      <uri>http://loretoparisi.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>A copy of &quot;Programming Erlang, Software for A Concurrent World&quot; by Mr. Joe Armstrong just landed in my lucky hands! I can't wait to read&nbsp; and learn from Erlangs'creator :)

I'm writing the introduction:



The World is parallel.
If we want to write programs that behave as other objects behave in
the real world, then these programs will have a concurrent structure.

Use a language that was designed for writing concurrent applications,
and development becomes&nbsp; lot easier.

Erlang programs model how we think and interact



Joe Armstrong


(Programming Erlang, Software for a Concurrent World, Joe Armstrong, Pragmatic Bookshelf, @2007 armstrononsoftware)

Links:

<a href="http://www.pragprog.com/titles/jaerlang/programming-erlang" target="_blank">Programming Erlang, Software for a Concurrent World, The Pragmatic Bookshelf.</a>
<a href="http://armstrongonsoftware.blogspot.com/" target="_blank">Armstrononsoftware, Blogger</a>
</p>Pubblicato da <a href="http://www.splinder.com/profile/loretoparisi" >loretoparisi</a> | <a href="http://erlangdevelopers.splinder.com/post/17296208/Programming+Erlang%2C+Software+f#comment" >Commenti (5)</a>
<br /><br />Tags: <a href="/myblog/tags/programming+erlang" rel="nofollow">programming erlang</a>, <a href="/myblog/tags/joe+armstrong" rel="nofollow">joe armstrong</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=17296208" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf&title=Programming+Erlang%2C+Software+for+A+Concurrent+World" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf&title=Programming+Erlang%2C+Software+for+A+Concurrent+World" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf&title=Programming+Erlang%2C+Software+for+A+Concurrent+World" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf&t=Programming+Erlang%2C+Software+for+A+Concurrent+World" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F17296208%2FProgramming%2BErlang%252C%2BSoftware%2Bf&title=Programming+Erlang%2C+Software+for+A+Concurrent+World" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="programming_erlang" scheme="http://erlangdevelopers.splinder.com/tag" label="programming_erlang" />
<category term="joe_armstrong" scheme="http://erlangdevelopers.splinder.com/tag" label="joe_armstrong" />
  </entry>
  <entry>
    <title type="html"><![CDATA[Lists arithmetic]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16848645/Lists+arithmetic" />
    <id>http://erlangdevelopers.splinder.com/post/16848645/Lists+arithmetic</id>
    <published>2008-04-23T10:20:03+02:00</published>
    <updated>2008-04-23T10:20:03+02:00</updated>
    <author>
      <name>stefko</name>
      <uri>http://laguardiabianca.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>In Erlang we can use many method to access to lists and tuples, and some of them are very quick and easy.
With ++ and -- operators you can add and subtract lists, like in the following example:

Thelist=[1,2,3,4,5,6,7,8,9,10],
Even = lists:filter(fun(E) -&gt;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  E rem 2 == 0
&nbsp;&nbsp;&nbsp; &nbsp; end,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thelist),
Odd=Thelist -- Even,
Newlist = Odd ++ [ one, five ].

So Odd list will contains [1,3,5,7,9], Even list will contains [2,4,6,8,10] and Newlist will contain [1,3,5,7,9,one,five].</p>Pubblicato da <a href="http://www.splinder.com/profile/stefko" >stefko</a> | <a href="http://erlangdevelopers.splinder.com/post/16848645/Lists+arithmetic#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/list" rel="nofollow">list</a>, <a href="/myblog/tags/erlang" rel="nofollow">erlang</a>, <a href="/myblog/tags/arithmetic" rel="nofollow">arithmetic</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16848645" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&title=Lists+arithmetic" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&title=Lists+arithmetic" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&title=Lists+arithmetic" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&t=Lists+arithmetic" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&title=Lists+arithmetic" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="list" scheme="http://erlangdevelopers.splinder.com/tag" label="list" />
<category term="erlang" scheme="http://erlangdevelopers.splinder.com/tag" label="erlang" />
<category term="arithmetic" scheme="http://erlangdevelopers.splinder.com/tag" label="arithmetic" />
  </entry>
  <entry>
    <title type="html"><![CDATA[XML socket in Flash with Ejebberd 2.0.0]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16639798/XML+socket+in+Flash+with+Ejebb" />
    <id>http://erlangdevelopers.splinder.com/post/16639798/XML+socket+in+Flash+with+Ejebb</id>
    <published>2008-04-07T13:03:02+02:00</published>
    <updated>2008-04-07T13:03:02+02:00</updated>
    <author>
      <name>stefko</name>
      <uri>http://laguardiabianca.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>I've recently been involved in the problem of Flash (7.0 and following) XML socket. 
Flash uses a &quot;strange&quot; kind of packet transfer in XML socket so Ejabberd 2.0.0 is not compatible with some Flash version.
I've seen a patch for Ejabberd 1.1.X versions and I've adapted it to fit with ejabberd 2.0.0.
Please note that this patch changes configure.ac file, but you must DO NOT run aclocal command.
At the moment aclocal.m4 file contains some macro that aclocal command will overwrite!
So please follow these steps to apply this patch to Ejabberd 2.0.0:

patch -p0 &lt;flash-xml-ejabberd-2.0.0.diff
rm configure
autoconf
./configure --enable-flash-hack
make

And you'll be able to use XMPP like this:
&lt;?xml version='1.0'?&gt;  &lt;flash:stream to='example.net' xmlns='jabber:client'     xmlns:flash='http://www.jabber.com/streams/flash' version='1.0'&gt;&lt;/flash:stream&gt;
<a href="http://www.webalice.it/loretoparisi/ejabberd/flash-xml-ejabberd-2.0.0.patch" target="_blank">The patch is available here.</a></p>Pubblicato da <a href="http://www.splinder.com/profile/stefko" >stefko</a> | <a href="http://erlangdevelopers.splinder.com/post/16639798/XML+socket+in+Flash+with+Ejebb#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/flash" rel="nofollow">flash</a>, <a href="/myblog/tags/patch" rel="nofollow">patch</a>, <a href="/myblog/tags/ejabberd" rel="nofollow">ejabberd</a>, <a href="/myblog/tags/xml+socket" rel="nofollow">xml socket</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16639798" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&title=XML+socket+in+Flash+with+Ejebberd+2.0.0" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&title=XML+socket+in+Flash+with+Ejebberd+2.0.0" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&title=XML+socket+in+Flash+with+Ejebberd+2.0.0" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&t=XML+socket+in+Flash+with+Ejebberd+2.0.0" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&title=XML+socket+in+Flash+with+Ejebberd+2.0.0" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="flash" scheme="http://erlangdevelopers.splinder.com/tag" label="flash" />
<category term="patch" scheme="http://erlangdevelopers.splinder.com/tag" label="patch" />
<category term="ejabberd" scheme="http://erlangdevelopers.splinder.com/tag" label="ejabberd" />
<category term="xml_socket" scheme="http://erlangdevelopers.splinder.com/tag" label="xml_socket" />
  </entry>
  <entry>
    <title type="html"><![CDATA[Ejabberd 2.0 Cookie Patch]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16638983/Ejabberd+2.0+Cookie+Patch" />
    <id>http://erlangdevelopers.splinder.com/post/16638983/Ejabberd+2.0+Cookie+Patch</id>
    <published>2008-04-07T11:37:55+02:00</published>
    <updated>2008-04-07T11:37:55+02:00</updated>
    <author>
      <name>loretoparisi</name>
      <uri>http://loretoparisi.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>As promised I'm releasing the cookie patch for ejabberd 2.0. The patch is quite simple and takes few minutes to check it out.
To apply the patch cumulatively, simply do the following


ejabberd/src/web/ $ patch &lt; $HOME/ejabberd-2.0-cookie.patch

Otherwise you could apply the patch to single files:


ejabberd/src/web/ $ patch ejabberd_http.hrl $HOME/ejabberd_http_hrl.patch
ejabberd/src/web/ $ patch ejabberd_http.erl $HOME/ejabberd_http_erl.patch 


Let me know if you got errors applying this patch.

Links:
<a target="_blank" href="http://www.webalice.it/loretoparisi/ejabberd/ejabberd-2.0-cookie.patch">ejabberd 2.0 Cumulative Cookie Patch</a>
<a target="_blank" href="http://www.webalice.it/loretoparisi/ejabberd/ejabberd_http_erl.patch">ejabberd_http Source Cookie Patch</a>
<a target="_blank" href="http://www.webalice.it/loretoparisi/ejabberd/ejabberd_http_hrl.patch">ejabberd_http Header Cookie Patch</a>
</p>Pubblicato da <a href="http://www.splinder.com/profile/loretoparisi" >loretoparisi</a> | <a href="http://erlangdevelopers.splinder.com/post/16638983/Ejabberd+2.0+Cookie+Patch#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/cookie" rel="nofollow">cookie</a>, <a href="/myblog/tags/patch" rel="nofollow">patch</a>, <a href="/myblog/tags/ejabberd" rel="nofollow">ejabberd</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16638983" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&title=Ejabberd+2.0+Cookie+Patch" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&title=Ejabberd+2.0+Cookie+Patch" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&title=Ejabberd+2.0+Cookie+Patch" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&t=Ejabberd+2.0+Cookie+Patch" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&title=Ejabberd+2.0+Cookie+Patch" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="cookie" scheme="http://erlangdevelopers.splinder.com/tag" label="cookie" />
<category term="patch" scheme="http://erlangdevelopers.splinder.com/tag" label="patch" />
<category term="ejabberd" scheme="http://erlangdevelopers.splinder.com/tag" label="ejabberd" />
  </entry>
  <entry>
    <title type="html"><![CDATA[Add cookie support in ejabberd]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16609181/Add+cookie+support+in+ejabberd" />
    <id>http://erlangdevelopers.splinder.com/post/16609181/Add+cookie+support+in+ejabberd</id>
    <published>2008-04-04T18:05:40+02:00</published>
    <updated>2008-04-04T18:05:40+02:00</updated>
    <author>
      <name>loretoparisi</name>
      <uri>http://loretoparisi.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>To add cookies to HTTP POST/GET requests in ejabberd (1.1.x and 2.x) we have to add some fields in the request headers, setting up the request and state records in ejabberd_http.erl module and its header file ejabberd_http.hrl.

First of all, we will add the field cookie to the record request in ejabberd_http.hrl header file as follows:

-record(request, {method,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q = [],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; us,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lang = &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookie = &quot;&quot;, %% lp: cookie request field
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }).

As you can see we are referring to ejabberd 2.0 (in the request record we have the new field ip for new user info).

Now we will edit the ejabberd_http.erl module, adding the field request_cookie to the record state:

-record(state, {sockmod,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_method,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_version,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_path,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_auth,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_cookie, %% lp: cookie request field
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_keepalive,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (...)
&nbsp;
At this point, we have to pass cookies to handlers, modifying the process_headers and process_request functions:

In the process_header, we will add to the case construct

process_header(State, Data) -&gt;
&nbsp;&nbsp;&nbsp; SockMod = State#state.sockmod,
&nbsp;&nbsp;&nbsp; Socket = State#state.socket,
&nbsp;&nbsp;&nbsp; case Data of
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {ok, {http_request, Method, Uri, Version}} -&gt;
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; (...)
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {ok, {http_header, _, 'Authorization', _, Auth}} -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State#state{request_auth = parse_auth(Auth)};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {ok, {http_header, _, 'Cookie', _, Cookie}} -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %% lp: setting up request header cookie
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State#state{request_cookie = Cookie};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {ok, {http_header, _, 'Content-Length', _, SLen}} -&gt;
&nbsp;&nbsp;&nbsp; (...)

In the process_request we have to modify the function header as follows:

process_request(#state{request_method = 'GET',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_path = {abs_path, Path},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_auth = Auth,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_lang = Lang,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_cookie = Cookie, %% lp: cookie request field
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_handlers = RequestHandlers,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sockmod = SockMod,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket = Socket} = State) -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (...)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Request = #request{method = 'GET',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = LPath,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q = LQuery,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth = Auth,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lang = Lang,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookie = Cookie, %% lp: here again :)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip=IP},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (...)

and in the next header too:

process_request(#state{request_method = 'POST',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_path = {abs_path, Path},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_auth = Auth,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_content_length = Len,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_lang = Lang,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_cookie = Cookie, %% lp: cookie
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sockmod = SockMod,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket = Socket,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request_handlers = RequestHandlers} = State)
&nbsp; when is_integer(Len) -&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (...)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Request = #request{method = 'POST',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = LPath,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q = LQuery,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth = Auth,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookie = Cookie, %% lp: cookie the last one ;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = Data,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lang = Lang},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case process(RequestHandlers, Request) of
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (...)

Now, we are ready to add the cookie request's field to our modules processing http requests:

process(#request{us = _US,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = &quot;login&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q = _Query,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lang = _Lang,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookie = _Cookie} = Request) -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %% _Cookie will contain the request cookie now
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %% Manage request by cookies
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %% Send response :)


I will eventually post a addon patch for this :)

Enjoy your Jabber,
LP


PS. We used ejabberd 2.0, but you can do this in ejabberd 1.1.x in the same way

 Links:
<a href="http://www.process-one.net/en/wiki/ejabberd_module_development/" target="_blank">http://www.process-one.net/en/wiki/ejabberd_module_development/</a></p>Pubblicato da <a href="http://www.splinder.com/profile/loretoparisi" >loretoparisi</a> | <a href="http://erlangdevelopers.splinder.com/post/16609181/Add+cookie+support+in+ejabberd#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/cookie" rel="nofollow">cookie</a>, <a href="/myblog/tags/request+headers" rel="nofollow">request headers</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16609181" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd&title=Add+cookie+support+in+ejabberd" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd&title=Add+cookie+support+in+ejabberd" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd&title=Add+cookie+support+in+ejabberd" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd&t=Add+cookie+support+in+ejabberd" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16609181%2FAdd%2Bcookie%2Bsupport%2Bin%2Bejabberd&title=Add+cookie+support+in+ejabberd" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="cookie" scheme="http://erlangdevelopers.splinder.com/tag" label="cookie" />
<category term="request_headers" scheme="http://erlangdevelopers.splinder.com/tag" label="request_headers" />
  </entry>
  <entry>
    <title type="html"><![CDATA[Logging in ejabberd 1.1.2]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16564086/Logging+in+ejabberd+1.1.2" />
    <id>http://erlangdevelopers.splinder.com/post/16564086/Logging+in+ejabberd+1.1.2</id>
    <published>2008-04-01T13:04:14+02:00</published>
    <updated>2008-04-01T13:04:14+02:00</updated>
    <author>
      <name>loretoparisi</name>
      <uri>http://loretoparisi.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>In the previous post <a href="http://www.splinder.com/profile/stefko" target="_blank">stefko</a> told us about the new logging facility in ejabberd 2.0. But how can we apply logging verbosity levels in previous releases of ejabberd, such as ejabberd 1.1.2 ?
Well,
I modififed the ejabberd.hrl in this way:

%%
%%&nbsp;&nbsp;&nbsp; --- 2007-05-10 - LP: LOGGER ---
%% &nbsp;&nbsp;&nbsp; Verbosity levels:
%%
%% &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level 0 - No verbosity
%%&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Level 1 - Error
%% &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level 2 - Warning
%% &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level 3 - Info
%% &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level 4 - Debug
%%

%% LP: Logger environment verbosity level variable
-define(LOGGER_ENV_LEVEL, &quot;EJABBERD_LOGGER_LEVEL&quot;).

%% LP: Default Logger Level to 3 - Info level
-define(LOGGER_DEFAULTLEVEL, 3).%% LP: Get verbosity level

-define(LOGGER_SETLEVEL(Level),
&nbsp;&nbsp;&nbsp; case string:to_integer(os:getenv(?LOGGER_ENV_LEVEL)) of
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {_,[]} -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case ({Level,[]} =&lt; string:to_integer(os:getenv(?LOGGER_ENV_LEVEL))) of 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true -&gt; Level;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; false -&gt; string:to_integer(os:getenv(?LOGGER_ENV_LEVEL))
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; end;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _ -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?LOGGER_DEFAULTLEVEL
&nbsp;&nbsp;&nbsp; end).

%% LP: Log messages
-define(LOGGER_LOG(Format, Args, Level),
&nbsp;&nbsp;&nbsp; %% switch verbosity against level
&nbsp;&nbsp;&nbsp; case Level of
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0 -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %% NO VERBOSITY
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ok;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1 -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %% ERROR LEVEL
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; error_logger:error_msg(&quot;ERROR(~p:~p:~p): &quot;++Format++&quot;~n&quot;,
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [self(),?MODULE,?LINE]++Args);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2 -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %% WARNING LEVEL
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; error_logger:warning_msg(&quot;WARN(~p:~p:~p): &quot;++Format++&quot;~n&quot;,
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [self(),?MODULE,?LINE]++Args);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3 -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %% INFO_MSG LEVEL
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; error_logger:info_msg(&quot;INFO(~p:~p:~p): &quot;++Format++&quot;~n&quot;,
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [self(),?MODULE,?LINE]++Args);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 4 -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %% DEBUG LEVEL - no custom file logger
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error_logger:info_msg(&quot;DEBUG(~p:~p:~p) : &quot;++Format++&quot;~n&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [self(),?MODULE,?LINE]++Args);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _ -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %% UNDEFINED LEVEL
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ok
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; end).


Then redifining the ?DEBUG, ?INFO_MSG, ?WARNING_MSG and ?ERROR_MSG with the new ?LOGGER_LOG define and adjusting the logger level with ?LOGGER_SETLEVEL(Value), whereas Value goes from 0 (no messages) to 4 (debug mode) as follows:


%% LP: Debug Message
-define(DEBUG(Format, Args), ?LOGGER_LOG(Format, Args, ?LOGGER_SETLEVEL(4))).

%% LP: Info Message
-define(INFO_MSG(Format, Args), ?LOGGER_LOG(Format, Args, ?LOGGER_SETLEVEL(3))).

%% LP: Warning Message
-define(WARNING_MSG(Format, Args), ?LOGGER_LOG(Format, Args, ?LOGGER_SETLEVEL(2))).

%% LP: Error Message
-define(ERROR_MSG(Format, Args), ?LOGGER_LOG(Format, Args, ?LOGGER_SETLEVEL(1))).

In this way it's possible to log errors, warnings, messages using the same code (no need to change other modules log instructions) by setting up the environment variable &quot;EJABBERD_LOGGER_LEVEL&quot;, called by os:getenv in the erl shell command:

erl ... -env ERL_MAX_PORTS 32000 \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -env EJABBERD_LOGGER_LEVEL 4 \

LP

</p>Pubblicato da <a href="http://www.splinder.com/profile/loretoparisi" >loretoparisi</a> | <a href="http://erlangdevelopers.splinder.com/post/16564086/Logging+in+ejabberd+1.1.2#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/debug" rel="nofollow">debug</a>, <a href="/myblog/tags/loglevel" rel="nofollow">loglevel</a>, <a href="/myblog/tags/verbosity" rel="nofollow">verbosity</a>, <a href="/myblog/tags/logger" rel="nofollow">logger</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16564086" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2&title=Logging+in+ejabberd+1.1.2" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2&title=Logging+in+ejabberd+1.1.2" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2&title=Logging+in+ejabberd+1.1.2" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2&t=Logging+in+ejabberd+1.1.2" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16564086%2FLogging%2Bin%2Bejabberd%2B1.1.2&title=Logging+in+ejabberd+1.1.2" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="debug" scheme="http://erlangdevelopers.splinder.com/tag" label="debug" />
<category term="loglevel" scheme="http://erlangdevelopers.splinder.com/tag" label="loglevel" />
<category term="verbosity" scheme="http://erlangdevelopers.splinder.com/tag" label="verbosity" />
<category term="logger" scheme="http://erlangdevelopers.splinder.com/tag" label="logger" />
  </entry>
  <entry>
    <title type="html"><![CDATA[Dynamic verbosity level change in ejabberd 2.0.0]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16486007/Dynamic+verbosity+level+change" />
    <id>http://erlangdevelopers.splinder.com/post/16486007/Dynamic+verbosity+level+change</id>
    <published>2008-03-26T11:46:15+01:00</published>
    <updated>2008-03-26T11:46:15+01:00</updated>
    <author>
      <name>stefko</name>
      <uri>http://laguardiabianca.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>There's a very useful method to dynamically change verbosity level in ejabberd 2.0.0.
You must connect with a remote shell to the node you're interested to debug and simply write:

ejabberd_loglevel:set(LogLevel).

Where LogLevel is:

    0: No ejabberd log at all (not recommended)
    1: Critical
    2: Error
    3: Warning
    4: Info
    5: Debug
</p>Pubblicato da <a href="http://www.splinder.com/profile/stefko" >stefko</a> | <a href="http://erlangdevelopers.splinder.com/post/16486007/Dynamic+verbosity+level+change#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/debug" rel="nofollow">debug</a>, <a href="/myblog/tags/ejabberd" rel="nofollow">ejabberd</a>, <a href="/myblog/tags/concurrent+programming" rel="nofollow">concurrent programming</a>, <a href="/myblog/tags/loglevel" rel="nofollow">loglevel</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16486007" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange&title=Dynamic+verbosity+level+change+in+ejabberd+2.0.0" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange&title=Dynamic+verbosity+level+change+in+ejabberd+2.0.0" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange&title=Dynamic+verbosity+level+change+in+ejabberd+2.0.0" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange&t=Dynamic+verbosity+level+change+in+ejabberd+2.0.0" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16486007%2FDynamic%2Bverbosity%2Blevel%2Bchange&title=Dynamic+verbosity+level+change+in+ejabberd+2.0.0" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="debug" scheme="http://erlangdevelopers.splinder.com/tag" label="debug" />
<category term="ejabberd" scheme="http://erlangdevelopers.splinder.com/tag" label="ejabberd" />
<category term="concurrent_programming" scheme="http://erlangdevelopers.splinder.com/tag" label="concurrent_programming" />
<category term="loglevel" scheme="http://erlangdevelopers.splinder.com/tag" label="loglevel" />
  </entry>
  <entry>
    <title type="html"><![CDATA[STDLIB: List To Record (revisited)]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16369595/STDLIB%3A+List+To+Record+%28revisi" />
    <id>http://erlangdevelopers.splinder.com/post/16369595/STDLIB%3A+List+To+Record+%28revisi</id>
    <published>2008-03-17T10:13:43+01:00</published>
    <updated>2008-03-17T10:13:43+01:00</updated>
    <author>
      <name>loretoparisi</name>
      <uri>http://loretoparisi.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>In a previous post,&nbsp; <a href="http://erlangdevelopers.splinder.com/post/16147279/STDLIB%3A+List+To+Record" target="_blank">STDLIB: List To Record</a>, we looked at a way to convert a list to a record by means of matching record fields. We made use of lists:mapfoldl and setelement lists and tuples's functions. That was just an exercise to practise with lists fun.
Now we'll a see a better way to implement this function that make more sense, using built-in function list_to_tuple and doing exactly the same job.

list_to_record(Query)-&gt;
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; Fields=record_info(fields,qs),
&nbsp;&nbsp;&nbsp; QS=#qs{},
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Record=lists:map(fun(Key) -&gt;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BKey=atom_to_list(Key),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Vl=case catch lists:keysearch(BKey,1,Query) of
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {value,VKey} -&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {K,V}=VKey,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; false -&gt;&nbsp; undefined;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {'EXIT',Reason} -&gt; undefined
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end
&nbsp;&nbsp;&nbsp; end,Fields),
&nbsp;&nbsp;&nbsp; list_to_tuple(lists:merge([qs],Record)).

That's all,
LP</p>Pubblicato da <a href="http://www.splinder.com/profile/loretoparisi" >loretoparisi</a> | <a href="http://erlangdevelopers.splinder.com/post/16369595/STDLIB%3A+List+To+Record+%28revisi#comment" >Commenti</a>
<br /><br />Tags: <a href="/myblog/tags/record" rel="nofollow">record</a>, <a href="/myblog/tags/list" rel="nofollow">list</a>, <a href="/myblog/tags/erlang" rel="nofollow">erlang</a>, <a href="/myblog/tags/stdlib" rel="nofollow">stdlib</a>, <a href="/myblog/tags/mapfoldl" rel="nofollow">mapfoldl</a>, <a href="/myblog/tags/tuple" rel="nofollow">tuple</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16369595" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi&title=STDLIB%3A+List+To+Record+%28revisited%29" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi&title=STDLIB%3A+List+To+Record+%28revisited%29" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi&title=STDLIB%3A+List+To+Record+%28revisited%29" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi&t=STDLIB%3A+List+To+Record+%28revisited%29" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16369595%2FSTDLIB%253A%2BList%2BTo%2BRecord%2B%2528revisi&title=STDLIB%3A+List+To+Record+%28revisited%29" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="record" scheme="http://erlangdevelopers.splinder.com/tag" label="record" />
<category term="list" scheme="http://erlangdevelopers.splinder.com/tag" label="list" />
<category term="erlang" scheme="http://erlangdevelopers.splinder.com/tag" label="erlang" />
<category term="stdlib" scheme="http://erlangdevelopers.splinder.com/tag" label="stdlib" />
<category term="mapfoldl" scheme="http://erlangdevelopers.splinder.com/tag" label="mapfoldl" />
<category term="tuple" scheme="http://erlangdevelopers.splinder.com/tag" label="tuple" />
  </entry>
  <entry>
    <title type="html"><![CDATA[A little help for clustering ejabberd]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16338302/A+little+help+for+clustering+e" />
    <id>http://erlangdevelopers.splinder.com/post/16338302/A+little+help+for+clustering+e</id>
    <published>2008-03-14T15:18:52+01:00</published>
    <updated>2008-03-14T15:18:52+01:00</updated>
    <author>
      <name>stefko</name>
      <uri>http://laguardiabianca.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>If you need to quickly make a cluster for many ejabberd nodes, you can find that a module that quickly initialize Mnesia tables can be very useful.
Follows the code of this module, really simple and autoexplicative.

-module(set_cluster_tables).

-export([
&nbsp; setCopyTable/1
&nbsp; ]).


loopTables(List, Dest, Node) -&gt;

&nbsp; lists:foreach(fun(Table) -&gt;
&nbsp;&nbsp;&nbsp; io:format(&quot;Change table copy for ~p in ~p\n&quot;,[Table,Dest]),
&nbsp;&nbsp;&nbsp; mnesia:add_table_copy(Table, Node, Dest)
&nbsp; end,List).

setCopyTable() -&gt;
&nbsp; io:format(&quot;Adding schema table\n&quot;,[]),
&nbsp; mnesia:change_table_copy_type(schema, node(), disc_copies),
&nbsp; TablesInRAM=[session,s2s,route,acl],
&nbsp; TablesInDisc=[muc_registered,muc_room,motd,last_activity,roster,passwd,privacy
,offline_msg,disco_publish,vcard,private_storage,pubsub_node],

&nbsp; loopTables(TablesInRAM,ram_copies,node()),
&nbsp; loopTables(TablesInDisc,disc_only_copies,node()).

So calling set_cluster_tables:setCopyTable(). you will have all specified tables copied from &quot;master&quot; node. Remember to exit using q(). or init:stop() command, to cleanly exit from the shell.</p>Pubblicato da <a href="http://www.splinder.com/profile/stefko" >stefko</a> | <a href="http://erlangdevelopers.splinder.com/post/16338302/A+little+help+for+clustering+e#comment" >Commenti (2)</a>
<br /><br />Tags: <a href="/myblog/tags/erlang" rel="nofollow">erlang</a>, <a href="/myblog/tags/clustering" rel="nofollow">clustering</a>, <a href="/myblog/tags/mnesia" rel="nofollow">mnesia</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16338302" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be&title=A+little+help+for+clustering+ejabberd" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be&title=A+little+help+for+clustering+ejabberd" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be&title=A+little+help+for+clustering+ejabberd" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be&t=A+little+help+for+clustering+ejabberd" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16338302%2FA%2Blittle%2Bhelp%2Bfor%2Bclustering%2Be&title=A+little+help+for+clustering+ejabberd" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
<category term="erlang" scheme="http://erlangdevelopers.splinder.com/tag" label="erlang" />
<category term="clustering" scheme="http://erlangdevelopers.splinder.com/tag" label="clustering" />
<category term="mnesia" scheme="http://erlangdevelopers.splinder.com/tag" label="mnesia" />
  </entry>
  <entry>
    <title type="html"><![CDATA[One line patch to ejabberd 2.0.0]]></title>
    <link rel="alternate" type="text/html" href="http://erlangdevelopers.splinder.com/post/16310710/One+line+patch+to+ejabberd+2.0" />
    <id>http://erlangdevelopers.splinder.com/post/16310710/One+line+patch+to+ejabberd+2.0</id>
    <published>2008-03-12T15:11:37+01:00</published>
    <updated>2008-03-12T15:11:37+01:00</updated>
    <author>
      <name>stefko</name>
      <uri>http://laguardiabianca.splinder.com</uri>
    </author>
    <content type="html" >
    <![CDATA[<p>In these days I'm using ejabberd 2.0.0, and I'm making a new module to set IM presences on Splinder site. 
The 
I've seen that the hook call c2s_update_presence in ejabberd_c2s module, is not using resource part of user's jid.
After a short discussion in the <a href="http://www.ejabberd.im/chatroom" target="_blank">ejabberd developer chatroom</a>, and after a little talk with <a href="http://www.ejabberd.im/user/1" target="_blank">badlop</a>, we have decided to patch che ejabberd_c2s code.
I think it may be useful to use resource too, so I've patched session_established function, from:

PresenceEl = ejabberd_hooks:run_fold(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c2s_update_presence,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewEl,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [User, Server]),
to:

PresenceEl = ejabberd_hooks:run_fold(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c2s_update_presence,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewEl,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [User, Server, StateData#state.resource]),

So the code executing the hook can be independent from jid record but can use values inside this type of variable.
You can follow the story about this patch <a target="_blank" href="https://support.process-one.net/browse/EJAB-559">here</a>.</p>Pubblicato da <a href="http://www.splinder.com/profile/stefko" >stefko</a> | <a href="http://erlangdevelopers.splinder.com/post/16310710/One+line+patch+to+ejabberd+2.0#comment" >Commenti (1)</a><br /><br />
<a href="http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0" title="Cita il post nel tuo blog" rel="nofollow" class="image" ><img src="http://www.splinder.com/modules/service_links/blogthis.png" alt="Cita il post nel tuo blog" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.splinder.com/community/contacts/invite?nid=16310710" title="Segnala il post" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/emailthis.png" alt="Segnala il post" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0&title=One+line+patch+to+ejabberd+2.0.0" title="Aggiungi su del.icio.us" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/delicious.png" alt="Aggiungi su del.icio.us" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://digg.com/submit?phase=2&url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0&title=One+line+patch+to+ejabberd+2.0.0" title="Aggiungi su digg.com" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/digg.png" alt="Aggiungi su digg.com" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0&title=One+line+patch+to+ejabberd+2.0.0" title="Aggiungi su Google" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/google.png" alt="Aggiungi su Google" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0&t=One+line+patch+to+ejabberd+2.0.0" title="Aggiungi su Yahoo" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/yahoo.png" alt="Aggiungi su Yahoo" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0" title="Aggiungi su Technorati" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/technorati.png" alt="Aggiungi su Technorati" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.badzu.net/submit?action=it&link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16310710%2FOne%2Bline%2Bpatch%2Bto%2Bejabberd%2B2.0&title=One+line+patch+to+ejabberd+2.0.0" title="Aggiungi su Badzu" rel="nofollow" class="image" target="_blank"><img src="http://www.splinder.com/modules/service_links/badzu.png" alt="Aggiungi su Badzu" /></a>

<br /><br />]]>
    </content>
  </entry>
</feed>
