<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1126" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Rebbaj,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>I found a segment of&nbsp;code in my files listed 
in following, and </FONT></DIV>
<DIV><FONT face=Arial size=2>you can see that I am using "$iq-&gt;GetXML()" and 
"$iq_result-&gt;GetXML()"</FONT></DIV>
<DIV><FONT face=Arial size=2>to check the IQ packet to be sent and the IQ packet 
result. </FONT></DIV>
<DIV><FONT face=Arial size=2>As long as the format </FONT><FONT face=Arial 
size=2>of XML is right, it should work. </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>So, please check your XML before sending. 
</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Good luck.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>-Yanming</DIV>
<DIV></FONT><FONT face=Arial size=2></FONT>&nbsp;</DIV><FONT face=Arial size=2>
<DIV>&nbsp;</DIV>
<DIV>...</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; print "Connecting: 
$username\@$server:$port/$resource\n";</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; # initialize the Jabber client 
object<BR>#&nbsp;&nbsp;&nbsp; $Connection = new 
Net::Jabber::Client(debuglevel=&gt;2, debugfile=&gt;"debug", 
debugtime=&gt;1);<BR>&nbsp;&nbsp;&nbsp; $Connection = new 
Net::Jabber::Client;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; print ".\n";<BR>&nbsp;&nbsp;&nbsp; # try the connection 
and get the status of it<BR>&nbsp;&nbsp;&nbsp; $status = 
$Connection-&gt;Connect("hostname" =&gt; 
$server,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "port" =&gt; 
$port);<BR>&nbsp;&nbsp;&nbsp; print ".\n";<BR>&nbsp;&nbsp;&nbsp; # If 
something's wrong with the connection<BR>&nbsp;&nbsp;&nbsp; if 
(!(defined($status))) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;print "&lt;br 
/&gt;ERROR:&nbsp; Jabber server is down or connection was not 
allowed.\n";<BR>&nbsp;print "&lt;br 
/&gt;($!)\n";<BR>&nbsp;<BR>&nbsp;&amp;print_file("./jru-bottom.inc");<BR>&nbsp;exit(0);<BR>&nbsp;&nbsp;&nbsp; 
}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; print ".\n";</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; # Set callbacks for incoming info<BR>&nbsp;&nbsp; 
$Connection-&gt;SetCallBacks("message" =&gt; 
\&amp;InMessage,<BR>&nbsp;&nbsp;&nbsp; "presence" =&gt; 
\&amp;InPresence,<BR>&nbsp;&nbsp;&nbsp; "iq" =&gt; \&amp;InIQ);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; # Connect!<BR>&nbsp;&nbsp;&nbsp; 
$Connection-&gt;Connect();<BR>&nbsp;&nbsp;&nbsp; print 
".\n";<BR>&nbsp;&nbsp;&nbsp; # Try authorization<BR>&nbsp;&nbsp;&nbsp; @result = 
$Connection-&gt;AuthSend("username" =&gt; 
$username,<BR>&nbsp;&nbsp;&nbsp;&nbsp;"password" =&gt; 
$password,<BR>&nbsp;&nbsp;&nbsp;&nbsp;"resource" =&gt; 
$resource);<BR>&nbsp;&nbsp;&nbsp; print ".\n";<BR>&nbsp;&nbsp;&nbsp; # If the 
auth went awry<BR>&nbsp;&nbsp;&nbsp; if ($result[0] ne "ok") 
<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;print "&lt;br /&gt;ERROR: Authorization 
failed: $result[0] - $result[1]\n&lt;br 
/&gt;";<BR>&nbsp;exit(0);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; print 
".\n";<BR>&nbsp;&nbsp;&nbsp; print "&lt;br /&gt;Logged in successfully to 
$server:$port as $username...\n";</DIV>
<DIV>&nbsp;</DIV>
<DIV>#&nbsp;&nbsp;&nbsp; print "&lt;br /&gt;Getting your 
roster...\n";<BR>#<BR>#&nbsp;&nbsp; this step is important --- to behavior as a 
regualr Jabber client.&nbsp; <BR>#<BR>&nbsp;&nbsp;&nbsp; %roster = 
$Connection-&gt;RosterGet();</DIV>
<DIV>&nbsp;</DIV>
<DIV>### Start of Subscription ####</DIV>
<DIV>&nbsp;</DIV>
<DIV>print "&lt;br /&gt;Sending 
presence...\n";<BR>$Connection-&gt;PresenceSend();<BR>#$Connection-&gt;Process(1);</DIV>
<DIV>&nbsp;</DIV>
<DIV>my ($iq, $iq_query, $iq_result, my $from);<BR>#<BR>#&lt;iq id="jcl_44" 
to="<A href="mailto:1st@mla.lvj1">1st@mla.lvj1</A>" 
type="set"&gt;<BR>#&nbsp;&lt;query 
xmlns="jabber:iq:register"&gt;<BR>#&nbsp;&nbsp;&lt;nick&gt;reminder&lt;/nick&gt;<BR>#&nbsp;&lt;/query&gt;<BR>#&lt;/iq&gt;<BR>#</DIV>
<DIV>&nbsp;</DIV>
<DIV>$from = "$username\@$server/$resource";</DIV>
<DIV>&nbsp;</DIV>
<DIV>print "&lt;br /&gt;from= $from\n";</DIV>
<DIV>&nbsp;</DIV>
<DIV>$iq = Net::Jabber::IQ-&gt;new();<BR>$iq-&gt;SetIQ(<BR>&nbsp;from&nbsp; 
=&gt; $from,<BR>&nbsp;type&nbsp; =&gt; 'set',<BR>&nbsp;to&nbsp;&nbsp;&nbsp; 
=&gt; $service_jid,<BR>&nbsp;id&nbsp;&nbsp;&nbsp; =&gt; 'jru_02',<BR>&nbsp;query 
=&gt; 'info'<BR>);</DIV>
<DIV>&nbsp;</DIV>
<DIV>$iq_query = 
$iq-&gt;NewQuery("jabber:iq:register");<BR>$iq_query-&gt;SetNick($nick);</DIV>
<DIV>&nbsp;</DIV>
<DIV>print "&lt;br /&gt;Sending iq...\n".$iq-&gt;GetXML()."\n";</DIV>
<DIV>&nbsp;</DIV>
<DIV>$iq_result = $Connection-&gt;SendAndReceiveWithID($iq, 1);<BR># 
Success<BR>if ($iq_result-&gt;GetType() eq 
'result')<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "&lt;br 
/&gt;";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 
$iq_result-&gt;GetXML();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 
"&lt;br /&gt;\n";<BR>}<BR># Failure<BR>else<BR>{<BR>&nbsp;print "&lt;br 
/&gt;Error: ", $iq_result-&gt;GetErrorCode(), " (", $iq_result-&gt;GetError(), 
")\n";<BR>#&nbsp;<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print 
"&lt;br /&gt;ERROR: IQ failed: $result[0] - $result[1]\n&lt;br 
/&gt;";<BR>#&nbsp;&nbsp;print "&lt;br /&gt;&lt;TEXTAREA NAME=RECV ROWS=10 
COLS=70&gt;\n";<BR>#&nbsp;&nbsp;print 
$result-&gt;toStr;<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
print "&lt;/TEXTAREA&gt;&lt;br /&gt;\n";<BR>#<BR>&nbsp;exit(0);<BR>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>#$Connection-&gt;Process(1);</DIV>
<DIV>&nbsp;</DIV>
<DIV>##########################<BR>my $presence = 
Net::Jabber::Presence-&gt;new();<BR>$presence-&gt;SetTo($service_jid);<BR>#$presence-&gt;SetFrom($from);<BR>$presence-&gt;SetType('subscribed'); 
</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>#while( $first_run &amp;&amp; 
defined($Connection-&gt;Process()))<BR>print "&lt;br /&gt;Sending 
presence...\n".$presence-&gt;GetXML()."\n";<BR>$iq_result = 
$Connection-&gt;SendAndReceiveWithID($presence, 1);</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>### End of Subscription ####</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; # Should be all done, so why don't we disconnect?&nbsp; 
Sounds like fun to me.. but fun to you?&nbsp; Could be.&nbsp; Give it a shot, 
anyway...<BR>&nbsp;&nbsp;&nbsp; print "&lt;br 
/&gt;Disconnecting...\n";<BR>#<BR>&nbsp;&nbsp;&nbsp; #$do_subscribe = 
'';<BR>&nbsp;&nbsp;&nbsp; #$query-&gt;delete_all();<BR>&nbsp;&nbsp;&nbsp; #print 
$query-&gt;start_multipart_form();<BR>&nbsp;&nbsp;&nbsp; #print 
$query-&gt;end_form();<BR>#<BR>&nbsp;&nbsp;&nbsp; 
$Connection-&gt;Disconnect();<BR>&nbsp;&nbsp;&nbsp; print "&lt;br 
/&gt;Disconnected.\n";</DIV>
<DIV>&nbsp;</DIV>
<DIV>#&nbsp;&nbsp;&nbsp; print "\n&lt;script 
type=\"text/javascript\"&gt;\n&lt;!--\nfunction popUpLog() {\n&nbsp;newWindow = 
window.open('', 'newWin', 
'toolbar=no,location=no,scrollbars=yes,resizable=yes,width=300,height=300')\n\n&nbsp;&nbsp; 
newWindow.document.write(\"&lt;html&gt;&lt;head&gt;&lt;title&gt;Jabber roster 
utility Log&lt;/title&gt;&lt;/head&gt;&lt;body bgcolor=ffffff 
text=000000&gt;&lt;b&gt;&lt;font face=sans-serif&gt;&lt;div align=left&gt;&lt;br 
/&gt;", $log, 
"&lt;/div&gt;&lt;/font&gt;&lt;/b&gt;&lt;/body&gt;&lt;/html&gt;\")\n}\n --&gt;\n 
&lt;/script&gt;";<BR>#&nbsp;&nbsp;&nbsp; print "&lt;br /&gt;&lt;a href=\"\#\" 
onmousedown=\"popUpLog(); return true;\"&gt;Click here&lt;/a&gt; to view a log 
of all users updated and all errors.\n&lt;br /&gt;&lt;br 
/&gt;";<BR>#<BR>#&nbsp;&nbsp;&nbsp; print "&lt;hr width=\"75%\" 
noshade=\"noshade\" /&gt;";</DIV>
<DIV></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV style="FONT: 10pt arial">----- Original Message ----- 
<DIV style="BACKGROUND: #e4e4e4; font-color: black"><B>From:</B> <A 
title=rebbaj2000@yahoo.co.uk href="mailto:rebbaj2000@yahoo.co.uk">rebbaj 
rebbaj</A> </DIV>
<DIV><B>To:</B> <A title=jdev@jabber.org 
href="mailto:jdev@jabber.org">jdev@jabber.org</A> </DIV>
<DIV><B>Sent:</B> Tuesday, January 07, 2003 5:39 PM</DIV>
<DIV><B>Subject:</B> Re: [JDEV] Proper use of Perl Net::Jabber calls</DIV></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT 
face=Arial size=2></FONT><BR></DIV>
<P>Thanks Yanming.&nbsp; I took a good long look at the code found at <A 
href="http://www.jabberstudio.org/cgi-bin/viewcvs.cgi/*checkout*/netjabber/examples/client.pl?rev=1.4&amp;content-type=text/plain">http://www.jabberstudio.org/cgi-bin/viewcvs.cgi/*checkout*/netjabber/examples/client.pl?rev=1.4&amp;content-type=text/plain</A> 

<P>What I still do not understand is why the $Connection-&gt;RosterGet(); call 
does not result in all of the roster entries being sent back&nbsp;from the 
server&nbsp;and hence triggering the&nbsp;sub InIQ routine.&nbsp; If I manually 
enter the following XML "&lt;iq type="get"&gt;&lt;query 
xmlns="jabber:iq:roster"/&gt;&lt;/iq&gt;, I get all the entries back. 
<P>The docs state "RosterGet() - sends an empty Net::Jabber::IQ::Roster tag to 
the server so the server will send the Roster to the client." 
<P>Any other ideas? 
<P>Regards, 
<P>Rebbaj 
<P>&nbsp;<B><I>Yanming Xiao &lt;xiao@legatovideo.com&gt;</I></B> wrote: 
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">
  <META content="MSHTML 6.00.2800.1126" name=GENERATOR>
  <STYLE></STYLE>

  <DIV><FONT face=Arial size=2>Rabbaj,</FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2>It seems to me that you are using 2 different 
  packages. </FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2>There is a function called "RosterGet()" in 
  Net::Jabber::Client. </FONT></DIV>
  <DIV><FONT face=Arial size=2>find the sample code in:</FONT></DIV>
  <DIV><FONT face=Arial size=2><A 
  href="http://jru.jabberstudio.org/">http://jru.jabberstudio.org/</A></FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial size=2>-Yanming</FONT></DIV>
  <BLOCKQUOTE 
  style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
    <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
    <DIV 
    style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
    <A title=rebbaj2000@yahoo.co.uk href="mailto:rebbaj2000@yahoo.co.uk">rebbaj 
    rebbaj</A> </DIV>
    <DIV style="FONT: 10pt arial"><B>To:</B> <A title=jdev@jabber.org 
    href="mailto:jdev@jabber.org">jdev@jabber.org</A> </DIV>
    <DIV style="FONT: 10pt arial"><B>Sent:</B> Tuesday, January 07, 2003 9:40 
    AM</DIV>
    <DIV style="FONT: 10pt arial"><B>Subject:</B> [JDEV] Proper use of Perl 
    Net::Jabber calls</DIV>
    <DIV><FONT face=Arial size=2></FONT><FONT face=Arial 
size=2></FONT><BR></DIV>
    <P>Hello jabber people.</P>
    <P>I am hoping that someone can help me out with how the Perl Net::Jabber 
    library should be used.&nbsp; Note that I am also somewhat new to perl so if 
    I get confused by some of the syntax, you will have to excuse me.&nbsp; The 
    examples in the Oreily book were rather helpful but I seem to be having 
    problems in calling and receiving IQ information.</P>
    <P>Here is what I am trying to send and receive in XML:</P>
    <P>SENT:<BR>&lt;iq id="jcl_9" type="get"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;query 
    xmlns="jabber:iq:roster"/&gt;<BR>&lt;/iq&gt;<BR><BR>RECV:<BR>&lt;iq <A 
    href="mailto:from='rebbaj@jabber.org/Perl'">from='rebbaj@jabber.org/Perl'</A> 
    id='jcl_9' type='result'&gt;<BR>&nbsp;&nbsp;&lt;query 
    xmlns='jabber:iq:roster'&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;item <A 
    href="mailto:jid='rebbaj@jabber.com'">jid='rebbaj@jabber.com'</A> 
    name='rebbaj' subscription='both'/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;item <A 
    href="mailto:jid='rebbaj2@jabber.com'">jid='rebbaj2@jabber.com'</A> 
    name='rebbaj2' subscription='both'/&gt;<BR>&nbsp; 
    &lt;/query&gt;<BR>&lt;/iq&gt;</P>
    <P>The code stub that I have written to do this is as follows.&nbsp; I 
    suspect that I have the flow a bit wrong and I am not using the optimal 
    calls to parse the resulting returned roster data...&nbsp; Any help would be 
    appreciated....</P>
    <P>rebbaj</P>
    <P>------------------------------------------------<BR>#!/usr/bin/perl<BR>use 
    Net::Jabber qw(Client);<BR>use strict;<BR>my 
    $c=Net::Jabber::Client-&gt;new();<BR>$c-&gt;Connect('hostname'=&gt; 
    'jabber.org', 'port'=&gt;5222);</P>
    <P>$c-&gt;AuthSend('username'=&gt; 
    'rebbaj',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'password'=&gt; 
    'secret',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'resource'=&gt; 'Perl');</P>
    <P>$c-&gt;SetCallBacks('presence'=&gt; 
    \&amp;handle_presence);<BR>$c-&gt;SetCallBacks('iq'=&gt; 
    \&amp;handle_iq);<BR>$c-&gt;PresenceSend();<BR><BR>My $IQ = new 
    Net::Jabber::IQ();<BR>$IQ-&gt;NewQuery("jabber:iq:roster");&nbsp; # Does 
    this actually make the IQ get request?$c-&gt;Send($IQ); # is this call 
    necessary?</P>
    <P>print "involking process\n";<BR>$c-&gt;Process();</P>
    <P><FONT face=Arial size=2></FONT>&nbsp;</P>
    <P>&nbsp;</P>
    <P><BR>$c-&gt;Disconnect;<BR>exit(0);</P>
    <P>sub handle_presence {<BR>&nbsp;my ($sid, $presence) = @_;</P>
    <P>&nbsp;my $show = $presence-&gt;GetShow() || 
    'online';<BR>&nbsp;<BR>&nbsp;print "presence packet received 
    $show\n";<BR>}</P>
    <P>sub handle_iq {<BR>&nbsp;my ($sid, $iq) = @_;</P>
    <P>&nbsp;my $querytag = $iq-&gt;GetQuery();</P>
    <P><BR>&nbsp;print "iq packet received $querytag\n";<BR>}</P>
    <P>
    <P><BR>
    <HR SIZE=1>
    <A 
    href="http://uk.yahoo.com/mail/tagline_xtra/?http://uk.docs.yahoo.com/mail_storage.html"><B><FONT 
    face=Arial size=2>With Yahoo! Mail you can get a bigger mailbox -- choose a 
    size that fits your needs</FONT></B></A><BR></BLOCKQUOTE></BLOCKQUOTE>
<P>
<P><BR>
<HR SIZE=1>
<A 
href="http://uk.yahoo.com/mail/tagline_xtra/?http://uk.docs.yahoo.com/mail_storage.html"><B><FONT 
face=Arial size=2>With Yahoo! Mail you can get a bigger mailbox -- choose a size 
that fits your needs</FONT></B></A><BR></BODY></HTML>