<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>MUC and creating rooms</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2 FACE="Arial">All,</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">I'm sure I'm doing something wrong, but I've been banging up against the most frustrating problem having a bot create a chat room, and I've found some unusual behavior by looking at debugging output from the Exodus client.&nbsp; To begin with, I know that MUC is properly installed on my server because I can create conference rooms on the fly using Exodus.</FONT></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">I've been using the Net::Jabber Perl library to have a bot connect using MUCJoin (I have v1.28).&nbsp; The following is an outline of my code:</FONT></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">$jabber = new Net::Jabber::Client();</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT SIZE=2 FACE="Arial"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($status) = $jabber-&gt;Connect(hostname=&gt;$j_server,&nbsp; port=&gt;$j_port);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">my (@result) = $jabber-&gt;AuthSend(username=&gt;$user,&nbsp; password=&gt;$pass,&nbsp; resource=&gt;$resource);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">$jabber-&gt;MUCJoin(room=&gt;$room_name, server=&gt;$j_chat_server, nick=&gt;$chat_nickname);</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">If I look in the &quot;.../jabber/spool/&lt;chat server name&gt;/&quot; directory I don't see any files created, and I can't get another client to connect to that room (keep getting a &quot;Forbidden&quot; message in Exodus).&nbsp; Frustratingly, I have to restart the Jabber server before I can try to create this room with Exodus, which is annoying but not necessary for my project.&nbsp; I assume this is because the room is in some half-created state and the server is not allowing anyone else to create a room with the same name.</FONT></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">So I looked at the debug output from the Exodus connection/creation of the conference room and found that if I do what it does everything works fine.&nbsp; This amounts to the following, which as you can see is ugly and undesirable:</FONT></P>

<P><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $jabber = new Net::Jabber::Client();</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT SIZE=2 FACE="Arial"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($status) = $jabber-&gt;Connect(hostname=&gt;$j_server,&nbsp; port=&gt;$j_port);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">my (@result) = $jabber-&gt;AuthSend(username=&gt;$user,&nbsp; password=&gt;$pass,&nbsp; resource=&gt;$resource);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">$jabber-&gt;MUCJoin(room=&gt;$room_name, server=&gt;$j_chat_server, nick=&gt;$chat_nickname);</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT SIZE=2 FACE="Arial"> # this is the first part of the hack protocol, which will send back a config &quot;form&quot;,</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # which describes the room's settings</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($iq) = new Net::Jabber::IQ();</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $iq-&gt;SetIQ(to=&gt;$room_name.'@'.$j_chat_server,&nbsp; type=&gt;&quot;get&quot;);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($iq_type) = $iq-&gt;NewQuery();</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $iq_type-&gt;SetXMLNS(&quot;<A HREF="http://jabber.org/protocol/muc#owner" TARGET="_blank">http://jabber.org/protocol/muc#owner</A>&quot;);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $jabber-&gt;Send($iq, 1);</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # this is the second part of the hack that just accepts the default settings</FONT>
<BR><FONT SIZE=2 FACE="Arial">my ($msg) =&lt;&lt;EOL;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&lt;iq to=&quot;$room_name\@$j_chat_server&quot; type=&quot;set&quot;&gt;&lt;query xmlns=&quot;<A HREF="http://jabber.org/protocol/muc#owner" TARGET="_blank">http://jabber.org/protocol/muc#owner</A>&quot;&gt;&lt;x type=&quot;submit&quot; xmlns=&quot;jabber:x:data&quot;&gt;&lt;title&gt;Room configuration&lt;/title&gt;&lt;field var=&quot;logformat&quot;&gt;&lt;value&gt;text&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;logging&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;whois&quot;&gt;&lt;value&gt;admins&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;password&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;invites&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;invitation&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;privmsg&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;defaulttype&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;moderated&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;legacy&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;persistant&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;public&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;privacy&quot;&gt;&lt;value&gt;1&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;participants&quot;&gt;&lt;value&gt;30&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;subject&quot;&gt;&lt;value&gt;0&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;rename&quot;&gt;&lt;value&gt;is now known as&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;join&quot;&gt;&lt;value&gt;has become available&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;leave&quot;&gt;&lt;value&gt;has left&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;title&quot;&gt;&lt;value&gt;t1&lt;/value&gt;&lt;/field&gt;&lt;field var=&quot;form&quot;&gt;&lt;value&gt;config&lt;/value&gt;&lt;/field&gt;&lt;/x&gt;&lt;/query&gt;&lt;/iq&gt;</FONT></P>

<P><FONT SIZE=2 FACE="Arial">EOL</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $jabber-&gt;Send($msg);</FONT>
</P>
<BR>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">Now, this creates the room (by which I mean I see a file in &quot;.../jabber/spool/&lt;chat server name&gt;/&quot;) which other clients can connect to.&nbsp; There are a couple of things I don't understand:</FONT></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">1) If I send any less than the complete registration form (&quot;$msg&quot; above) it doesn't work</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">2) Why do I have to take those extra steps at all?&nbsp; Shouldn't MUCJoin take care of all this for me?&nbsp; Does this imply a problem or is this expected behavior?</FONT></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">I've seen some unrelated posts about joining a MUC so my apologies if this is a known problem that I wasn't able to find.</FONT></P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">-Vinny</FONT>
</P>
<BR>

</BODY>
</HTML>