Net::Jabber::Protocol.3pm

Langue: en

Version: 2004-08-17 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

NAME

Net::Jabber::Protocol - Jabber Protocol Library

SYNOPSIS


  Net::Jabber::Protocol is a module that provides a developer easy

  access to the Jabber Instant Messaging protocol.  It provides high

  level functions to the Net::Jabber Client, Component, and Server

  objects.  These functions are automatically indluded in those modules

  through AUTOLOAD and delegates.



DESCRIPTION


  Protocol.pm seeks to provide enough high level APIs and automation of

  the low level APIs that writing a Jabber Client/Transport in Perl is

  trivial.  For those that wish to work with the low level you can do

  that too, but those functions are covered in the documentation for

  each module.




  Net::Jabber::Protocol provides functions to login, send and receive

  messages, set personal information, create a new user account, manage

  the roster, and disconnect.  You can use all or none of the functions,

  there is no requirement.




  For more information on how the details for how Net::Jabber is written

  please see the help for Net::Jabber itself.




  For more information on writing a Client see Net::Jabber::Client.




  For more information on writing a Transport see Net::Jabber::Transport.



Modes


  Several of the functions take a mode argument that let you specify how

  the function should behave:




    block - send the packet with an ID, and then block until an answer

            comes back.  You can optionally specify a timeout so that

            you do not block forever.




    nonblock - send the packet with an ID, but then return that id and

               control to the master program.  Net::Jabber is still

               tracking this packet, so you must use the CheckID function

               to tell when it comes in.  (This might not be very

               useful...)




    passthru - send the packet with an ID, but do NOT register it with

               Net::Jabber, then return the ID.  This is useful when

               combined with the XPath function because you can register

               a one shot function tied to the id you get back.



Basic Functions


    use Net::Jabber qw( Client );

    $Con = new Net::Jabber::Client();                # From

    $status = $Con->Connect(hostname=>"jabber.org"); # Net::Jabber::Client




      or




    use Net::Jabber qw( Component );

    $Con = new Net::Jabber::Component();             #

    $status = $Con->Connect(hostname=>"jabber.org",  # From

                            secret=>"bob");          # Net::Jabber::Component




    #

    # For callback setup, see Net::XMPP::Protocol

    #




    $Con->Info(name=>"Jarl",

               version=>"v0.6000");



ID Functions


    $id         = $Con->SendWithID($sendObj);

    $id         = $Con->SendWithID("<tag>XML</tag>");

    $receiveObj = $Con->SendAndReceiveWithID($sendObj);

    $receiveObj = $Con->SendAndReceiveWithID($sendObj,

                                             10);

    $receiveObj = $Con->SendAndReceiveWithID("<tag>XML</tag>");

    $receiveObj = $Con->SendAndReceiveWithID("<tag>XML</tag>",

                                             5);

    $yesno      = $Con->ReceivedID($id);

    $receiveObj = $Con->GetID($id);

    $receiveObj = $Con->WaitForID($id);

    $receiveObj = $Con->WaitForID($id,

                                  20);



IQ Functions

Agents Functions


    %agents = $Con->AgentsGet();

    %agents = $Con->AgentsGet(to=>"transport.jabber.org");



Browse Functions


    %hash = $Con->BrowseRequest(jid=>"jabber.org");

    %hash = $Con->BrowseRequest(jid=>"jabber.org",

                                timeout=>10);




    $id = $Con->BrowseRequest(jid=>"jabber.org",

                              mode=>"nonblock");




    $id = $Con->BrowseRequest(jid=>"jabber.org",

                              mode=>"passthru");



Browse DB Functions


    $Con->BrowseDBDelete("jabber.org");

    $Con->BrowseDBDelete(Net::Jabber::JID);




    $presence  = $Con->BrowseDBQuery(jid=>"bob\@jabber.org");

    $presence  = $Con->BrowseDBQuery(jid=>Net::Jabber::JID);

    $presence  = $Con->BrowseDBQuery(jid=>"users.jabber.org",

                                     timeout=>10);

    $presence  = $Con->BrowseDBQuery(jid=>"conference.jabber.org",

                                     refresh=>1);



Bystreams Functions


    %hash = $Con->ByteStreamsProxyRequest(jid=>"proxy.server"); 

    %hash = $Con->ByteStreamsProxyRequest(jid=>"proxy.server",

                                          timeout=>10);




    $id = $Con->ByteStreamsProxyRequest(jid=>"proxy.server",

                                        mode=>"nonblock");




    $id = $Con->ByteStreamsProxyRequest(jid=>"proxy.server",

                                        mode=>"passthru");




    %hash = $Con->ByteStreamsProxyParse($query);




    $status = $Con->ByteStreamsProxyActivate(sid=>"stream_id",

                                             jid=>"proxy.server"); 

    $status = $Con->ByteStreamsProxyActivate(sid=>"stream_id",

                                             jid=>"proxy.server",

                                            timeout=>10);




    $id = $Con->ByteStreamsProxyActivate(sid=>"stream_id",

                                         jid=>"proxy.server",

                                        mode=>"nonblock");




    $id = $Con->ByteStreamsProxyActivate(sid=>"stream_id",

                                         jid=>"proxy.server",

                                        mode=>"passthru");




    $jid = $Con->ByteStreamsOffer(sid=>"stream_id",

                                  streamhosts=>[{jid=>"jid",

                                                 host=>"host",

                                                 port=>"port",

                                                 zeroconf=>"zero",

                                                },

                                                ...

                                               ],

                                  jid=>"bob\@jabber.org"); 

    $jid = $Con->ByteStreamsOffer(sid=>"stream_id",

                                  streamhosts=>[{},{},...],

                                  jid=>"bob\@jabber.org",

                                  timeout=>10);




    $id = $Con->ByteStreamsOffer(sid=>"stream_id",

                                 streamhosts=>[{},{},...],

                                 jid=>"bob\@jabber.org",

                                 mode=>"nonblock");




    $id = $Con->ByteStreamsOffer(sid=>"stream_id",

                                 streamhosts=>[{},{},...],

                                 jid=>"bob\@jabber.org",

                                 mode=>"passthru");



Disco Functions


    %hash = $Con->DiscoInfoRequest(jid=>"jabber.org");

    %hash = $Con->DiscoInfoRequest(jid=>"jabber.org",

                                   node=>"node...");

    %hash = $Con->DiscoInfoRequest(jid=>"jabber.org",

                                   node=>"node...",

                                   timeout=>10);




    $id = $Con->DiscoInfoRequest(jid=>"jabber.org",

                                 mode=>"nonblock");

    $id = $Con->DiscoInfoRequest(jid=>"jabber.org",

                                 node=>"node...",

                                 mode=>"nonblock");




    $id = $Con->DiscoInfoRequest(jid=>"jabber.org",

                                 mode=>"passthru");

    $id = $Con->DiscoInfoRequest(jid=>"jabber.org",

                                 node=>"node...",

                                 mode=>"passthru");




    %hash = $Con->DiscoInfoParse($query);




    %hash = $Con->DiscoItemsRequest(jid=>"jabber.org");

    %hash = $Con->DiscoItemsRequest(jid=>"jabber.org",

                                    timeout=>10);




    $id = $Con->DiscoItemsRequest(jid=>"jabber.org",

                                  mode=>"nonblock");




    $id = $Con->DiscoItemsRequest(jid=>"jabber.org",

                                  mode=>"passthru");




    %hash = $Con->DiscoItemsParse($query);



Feature Negotiation Functions


    %hash = $Con->FeatureNegRequest(jid=>"jabber.org",

                                    features=>{ feat1=>["opt1","opt2",...],

                                                feat2=>["optA","optB",...]

                                              }

                                   );

    %hash = $Con->FeatureNegRequest(jid=>"jabber.org",

                                    features=>{ ... },

                                    timeout=>10);




    $id = $Con->FeatureNegRequest(jid=>"jabber.org",

                                  features=>{ ... },

                                  mode=>"nonblock");




    $id = $Con->FeatureNegRequest(jid=>"jabber.org",

                                  features=>{ ... },

                                  mode=>"passthru");




    my $query = $self->FeatureNegQuery(\{ ... });

    $iq->AddQuery($query);




    %hash = $Con->FeatureNegParse($query);



File Transfer Functions


    $method = $Con->FileTransferOffer(jid=>"bob\@jabber.org",

                                      sid=>"stream_id",

                                      filename=>"/path/to/file",

                                      methods=>["http://jabber.org/protocol/si/profile/bytestreams",

                                                "jabber:iq:oob",

                                                ...

                                               ]

                                     );

    $method = $Con->FileTransferOffer(jid=>"bob\@jabber.org",

                                      sid=>"stream_id",

                                      filename=>"/path/to/file",

                                      methods=>\@methods,

                                      timeout=>"10");




    $id = $Con->FileTransferOffer(jid=>"bob\@jabber.org",

                                  sid=>"stream_id",

                                  filename=>"/path/to/file",

                                  methods=>\@methods,

                                  mode=>"nonblock");




    $id = $Con->FileTransferOffer(jid=>"bob\@jabber.org",

                                  sid=>"stream_id",

                                  filename=>"/path/to/file",

                                  methods=>\@methods,

                                  mode=>"passthru");



Last Functions


    $Con->LastQuery();

    $Con->LastQuery(to=>"bob@jabber.org");




    %result = $Con->LastQuery(mode=>"block");

    %result = $Con->LastQuery(to=>"bob@jabber.org",

                              mode=>"block");




    %result = $Con->LastQuery(to=>"bob@jabber.org",

                              mode=>"block",

                              timeout=>10);

    %result = $Con->LastQuery(mode=>"block",

                              timeout=>10);




    $Con->LastSend(to=>"bob@jabber.org");




    $seconds = $Con->LastActivity();



Multi-User Chat Functions


    $Con->MUCJoin(room=>"jabber",

                  server=>"conference.jabber.org",

                  nick=>"nick");




    $Con->MUCJoin(room=>"jabber",

                  server=>"conference.jabber.org",

                  nick=>"nick",

                  password=>"secret");



Register Functions


    @result = $Con->RegisterSendData("users.jabber.org",

                                     first=>"Bob",

                                     last=>"Smith",

                                     nick=>"bob",

                                     email=>"foo@bar.net");



RPC Functions


    $query = $Con->RPCEncode(type=>"methodCall",

                             methodName=>"methodName",

                             params=>[param,param,...]);

    $query = $Con->RPCEncode(type=>"methodResponse",

                             params=>[param,param,...]);

    $query = $Con->RPCEncode(type=>"methodResponse",

                             faultCode=>4,

                             faultString=>"Too many params");




    @response = $Con->RPCParse($iq);




    @response = $Con->RPCCall(to=>"dataHouse.jabber.org",

                              methodname=>"numUsers",

                              params=>[ param,param,... ]

                             );




    $Con->RPCResponse(to=>"you\@jabber.org",

                      params=>[ param,param,... ]);




    $Con->RPCResponse(to=>"you\@jabber.org",

                      faultCode=>"4",

                      faultString=>"Too many parameters"

                     );




    $Con->RPCSetCallBacks(myMethodA=>\&methoda,

                          myMethodB=>\&do_somthing,

                          etc...

                         );



Search Functions


    %fields = $Con->SearchRequest();

    %fields = $Con->SearchRequest(to=>"users.jabber.org");

    %fields = $Con->SearchRequest(to=>"users.jabber.org",

                                  timeout=>10);




    $Con->SearchSend(to=>"somewhere",

                     name=>"",

                     first=>"Bob",

                     last=>"",

                     nick=>"bob",

                     email=>"",

                     key=>"some key");




    $Con->SearchSendData("users.jabber.org",

                         first=>"Bob",

                         last=>"",

                         nick=>"bob",

                         email=>"");



Time Functions


    $Con->TimeQuery();

    $Con->TimeQuery(to=>"bob@jabber.org");




    %result = $Con->TimeQuery(mode=>"block");

    %result = $Con->TimeQuery(to=>"bob@jabber.org",

                              mode=>"block");




    $Con->TimeSend(to=>"bob@jabber.org");



Version Functions


    $Con->VersionQuery();

    $Con->VersionQuery(to=>"bob@jabber.org");




    %result = $Con->VersionQuery(mode=>"block");

    %result = $Con->VersionQuery(to=>"bob@jabber.org",

                                 mode=>"block");




    $Con->VersionSend(to=>"bob@jabber.org",

                      name=>"Net::Jabber",

                      ver=>"1.0a",

                      os=>"Perl");



METHODS

Basic Functions


    Info(name=>string,    - Set some information so that Net::Jabber

         version=>string)   can auto-reply to some packets for you to

                            reduce the work you have to do.




                            NOTE: This requires that you use the

                            SetIQCallBacks methodology and not the

                            SetCallBacks for <iq/> packets.



IQ Functions

Agents Functions


    ********************************

    *                              *

    * Deprecated in favor of Disco *

    *                              *

    ********************************




    AgentsGet(to=>string, - takes all of the information and

    AgentsGet()             builds a Net::Jabber::IQ::Agents packet.

                            It then sends that packet either to the

                            server, or to the specified transport,

                            with an ID and waits for that ID to return.

                            Then it looks in the resulting packet and

                            builds a hash that contains the values

                            of the agent list.  The hash is layed out

                            like this:  (NOTE: the jid is the key to

                            distinguish the various agents)




                              $hash{<JID>}->{order} = 4

                                          ->{name} = "ICQ Transport"

                                          ->{transport} = "ICQ #"

                                          ->{description} = "ICQ..blah.."

                                          ->{service} = "icq"

                                          ->{register} = 1

                                          ->{search} = 1

                                        etc...




                            The order field determines the order that

                            it came from the server in... in case you

                            care.  For more info on the valid fields

                            see the Net::Jabber::Query jabber:iq:agent

                            namespace.



Browse Functions


    ********************************

    *                              *

    * Deprecated in favor of Disco *

    *                              *

    ********************************




    BrowseRequest(jid=>string, - sends a jabber:iq:browse request to

                  mode=>string,  the jid passed as an argument.

                  timeout=>int)  Returns a hash with the resulting

                                 tree if mode is set to "block":




                $browse{'category'} = "conference"

                $browse{'children'}->[0]

                $browse{'children'}->[1]

                $browse{'children'}->[11]

                $browse{'jid'} = "conference.jabber.org"

                $browse{'name'} = "Jabber.org Conferencing Center"

                $browse{'ns'}->[0]

                $browse{'ns'}->[1]

                $browse{'type'} = "public"




                                 The ns array is an array of the

                                 namespaces that this jid supports.

                                 The children array points to hashs

                                 of this form, and represent the fact

                                 that they can be browsed to.




                                 See MODES above for using the mode

                                 and timeout.



Browse DB Functions


    BrowseDBDelete(string|Net::Jabber::JID) - delete thes JID browse

                                              data from the DB.




    BrowseDBQuery(jid=>string | NJ::JID, - returns the browse data

                  timeout=>integer,        for the requested JID.  If

                  refresh=>0|1)            the DB does not contain

                                           the data for the JID, then

                                           it attempts to fetch the

                                           data via BrowseRequest().

                                           The timeout is passed to

                                           the BrowseRequest() call,

                                           and refresh tells the DB

                                           to request the data, even

                                           if it already has some.



Bytestreams Functions


    ByteStreamsProxyRequest(jid=>string, - sends a bytestreams request

                            mode=>string,  to the jid passed as an

                            timeout=>int)  argument.  Returns an array

                                           ref with the resulting tree

                                           if mode is set to "block".




                                           See ByteStreamsProxyParse

                                           for the format of the

                                           resulting tree.




                                           See MODES above for using

                                           the mode and timeout.




    ByteStreamsProxyParse(Net::Jabber::Query) - parses the query and

                                                returns an array ref

                                                to the resulting tree:




                $host[0]->{jid} = "bytestreams1.proxy.server";

                $host[0]->{host} = "proxy1.server";

                $host[0]->{port} = "5006";

                $host[1]->{jid} = "bytestreams2.proxy.server";

                $host[1]->{host} = "proxy2.server";

                $host[1]->{port} = "5007";

                ...




    ByteStreamsProxyActivate(jid=>string, - sends a bytestreams activate

                             sid=>string,   to the jid passed as an

                             mode=>string,  argument.  Returns 1 if the

                             timeout=>int)  proxy activated (undef if

                                            it did not) if mode is set

                                            to "block".




                                            sid is the stream id that

                                            is being used to talk about

                                            this stream.




                                            See MODES above for using

                                            the mode and timeout.




    ByteStreamsOffer(jid=>string,         - sends a bytestreams offer

                     sid=>string,           to the jid passed as an

                     streamhosts=>arrayref  argument.  Returns the jid

                     mode=>string,          of the streamhost that the

                     timeout=>int)          user selected if mode is set

                                            to "block".




                                            streamhosts is the same

                                            format as the array ref

                                            returned from

                                            ByteStreamsProxyParse.




                                            See MODES above for using

                                            the mode and timeout.



Disco Functions


    DiscoInfoRequest(jid=>string, - sends a disco#info request to

                     node=>string,  the jid passed as an argument,

                     mode=>string,  and the node if specified.

                     timeout=>int)  Returns a hash with the resulting

                                    tree if mode is set to "block".




                                    See DiscoInfoParse for the format

                                    of the resulting tree.




                                    See MODES above for using the mode

                                    and timeout.




    DiscoInfoParse(Net::Jabber::Query) - parses the query and

                                         returns a hash ref

                                         to the resulting tree:




             $info{identity}->[0]->{category} = "groupchat";

             $info{identity}->[0]->{name} = "Public Chatrooms";

             $info{identity}->[0]->{type} = "public";




             $info{identity}->[1]->{category} = "groupchat";

             $info{identity}->[1]->{name} = "Private Chatrooms";

             $info{identity}->[1]->{type} = "private";




             $info{feature}->{http://jabber.org/protocol/disco#info} = 1;

             $info{feature}->{http://jabber.org/protocol/muc#admin} = 1;




    DiscoItemsRequest(jid=>string, - sends a disco#items request to

                      mode=>string,  the jid passed as an argument.

                      timeout=>int)  Returns a hash with the resulting

                                     tree if mode is set to "block".




                                     See DiscoItemsParse for the format

                                     of the resulting tree.




                                     See MODES above for using the mode

                                     and timeout.




    DiscoItemsParse(Net::Jabber::Query) - parses the query and

                                          returns a hash ref

                                          to the resulting tree:




             $items{jid}->{node} = name;




             $items{"proxy.server"}->{""} = "Bytestream Proxy Server";

             $items{"conf.server"}->{"public"} = "Public Chatrooms";

             $items{"conf.server"}->{"private"} = "Private Chatrooms";



Feature Negotiation Functions


    FeatureNegRequest(jid=>string,       - sends a feature negotiation to

                      features=>hash ref,  the jid passed as an argument,

                      mode=>string,        using the features specified.

                      timeout=>int)        Returns a hash with the resulting

                                           tree if mode is set to "block".




                                           See DiscoInfoQuery for the format

                                           of the features hash ref.




                                           See DiscoInfoParse for the format

                                           of the resulting tree.




                                           See MODES above for using the mode

                                           and timeout.




    FeatureNegParse(Net::Jabber::Query) - parses the query and

                                          returns a hash ref

                                          to the resulting tree:




             $features->{feat1} = ["opt1","opt2",...];

             $features->{feat2} = ["optA","optB",...];

             ....




                                          If this is a result:




             $features->{feat1} = "opt2";

             $features->{feat2} = "optA";

             ....




    FeatureNeqQuery(hash ref) - takes a hash ref and turns it into a

                                feature negotiation query that you can

                                AddQuery into your packaet.  The format

                                of the hash ref is as follows:




             $features->{feat1} = ["opt1","opt2",...];

             $features->{feat2} = ["optA","optB",...];

             ....



File Transfer Functions


    FileTransferOffer(jid=>string,         - sends a file transfer stream

                      sid=>string,           initiation to the jid passed

                      filename=>string,      as an argument.  Returns the

                      mode=>string,          method (if the users accepts),

                      timeout=>int)          undef (if the user declines),

                                             if the mode is set to "block".




                                             See MODES above for using

                                             the mode and timeout.



Last Functions


    LastQuery(to=>string,     - asks the jid specified for its last

              mode=>string,     activity.  If the to is blank, then it

              timeout=>int)     queries the server.  Returns a hash with

    LastQuery()                 the various items set if mode is set to

                                "block":




                                  $last{seconds} - Seconds since activity

                                  $last{message} - Message for activity




                                See MODES above for using the mode

                                and timeout.




    LastSend(to=>string, - sends the specified last to the specified jid.

             hash)         the hash is the seconds and message as shown

                           in the Net::Jabber::Query man page.




    LastActivity() - returns the number of seconds since the last activity

                     by the user.



Multi-User Chat Functions


    MUCJoin(room=>string,    - Sends the appropriate MUC protocol to join

            server=>string,    the specified room with the specified nick.

            nick=>string,

            password=>string)



Register Functions


    RegisterSendData(string|JID, - takes the contents of the hash and

                     hash)         builds a jabebr:x:data return packet

                                   which it sends in a Net::Jabber::Query

                                   jabber:iq:register namespace packet.

                                   The first argument is the JID to send

                                   the packet to.  This function returns

                                   an array that looks like this:




                                     [ type , message ]




                                   If type is "ok" then registration was

                                   successful, otherwise message contains

                                   a little more detail about the error.



RPC Functions


    RPCParse(IQ object) - returns an array.  The first argument tells

                          the status "ok" or "fault".  The second

                          argument is an array if "ok", or a hash if

                          "fault".




    RPCCall(to=>jid|string,     - takes the methodName and params,

            methodName=>string,   builds the RPC calls and sends it

            params=>array,        to the specified address.  Returns

            mode=>string,         the above data from RPCParse.

            timeout=>int)         

                                  See MODES above for using the mode

                                  and timeout.




    RPCResponse(to=>jid|string,      - generates a response back to

                params=>array,         the caller.  If any part of

                faultCode=>int,        fault is specified, then it

                faultString=>string)   wins.




    Note: To ensure that you get the correct type for a param sent

          back, you can specify the type by prepending the type to

          the value:




            "i4:5" or "int:5"

            "boolean:0"

            "string:56"

            "double:5.0"

            "datetime:20020415T11:11:11"

            "base64:...."




    RPCSetCallBacks(method=>function, - sets the callback functions

                    method=>function,   for the specified methods.

                    etc...)             The method comes from the

                                        <methodName/> and is case

                                        sensitive.  The single

                                        arguemnt is a ref to an

                                        array that contains the

                                        <params/>.  The function you

                                        write should return one of two

                                        things:




                                          ["ok", [...] ]




                                        The [...] is a list of the

                                        <params/> you want to return.




                                          ["fault", {faultCode=>1,

                                                     faultString=>...} ]




                                        If you set the function to undef,

                                        then the method is removed from

                                        the list.



Search Functions


    SearchRequest(to=>string,  - send an <iq/> request to the specified

                  mode=>string,  server/transport, if not specified it

                  timeout=>int)  sends to the current active server.

    SearchRequest()              The function returns a hash that

                                 contains the required fields.   Here

                                 is an example of the hash:




                                 $hash{fields}    - The raw fields from

                                                    the iq:register.  To

                                                    be used if there is

                                                    no x:data in the

                                                    packet.

                                 $hash{instructions} - How to fill out

                                                       the form.

                                 $hash{form}   - The new dynamic forms.




                                 In $hash{form}, the fields that are

                                 present are the required fields the

                                 server needs.




                                 See MODES above for using the mode

                                 and timeout.




    SearchSend(to=>string|JID, - takes the contents of the hash and

               hash)             passes it to the SetSearch function

                                 in the Net::Jabber::Query

                                 jabber:iq:search namespace.  And then

                                 sends the packet.




    SearchSendData(string|JID, - takes the contents of the hash and

                   hash)         builds a jabebr:x:data return packet

                                 which it sends in a Net::Jabber::Query

                                 jabber:iq:search namespace packet.

                                 The first argument is the JID to send

                                 the packet to.



Time Functions


    TimeQuery(to=>string,     - asks the jid specified for its localtime.

              mode=>string,     If the to is blank, then it queries the

              timeout=>int)     server.  Returns a hash with the various

    TimeQuery()                 items set if mode is set to "block":




                                  $time{utc}     - Time in UTC

                                  $time{tz}      - Timezone

                                  $time{display} - Display string




                                See MODES above for using the mode

                                and timeout.




    TimeSend(to=>string) - sends the current UTC time to the specified

                           jid.



Version Functions


    VersionQuery(to=>string,     - asks the jid specified for its

                 mode=>string,     client version information.  If the

                 timeout=>int)     to is blank, then it queries the

    VersionQuery()                 server.  Returns ahash with the

                                   various items set if mode is set to

                                   "block":




                                     $version{name} - Name

                                     $version{ver}  - Version

                                     $version{os}   - Operating System/

                                                        Platform




                                  See MODES above for using the mode

                                  and timeout.




    VersionSend(to=>string,   - sends the specified version information

                name=>string,   to the jid specified in the to.

                ver=>string,

                os=>string)



AUTHOR

Ryan Eatmon This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.