ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Net-XMPP2/README
Revision: 1.5
Committed: Wed Jul 25 10:04:39 2007 UTC (17 years, 6 months ago) by elmex
Branch: MAIN
Changes since 1.4: +25 -2 lines
Log Message:
Release of version 0.03

File Contents

# Content
1 NAME
2 Net::XMPP2 - An implementation of the XMPP Protocol
3
4 VERSION
5 Version 0.03
6
7 SYNOPSIS
8 use Net::XMPP2::Connection;
9
10 or:
11
12 use Net::XMPP2::IM::Connection;
13
14 or:
15
16 use Net::XMPP2::Client;
17
18 DESCRIPTION
19 This is the head module of the Net::XMPP2 XMPP client protocol (as
20 described in RFC 3920 and RFC 3921) framework.
21
22 Net::XMPP2::Connection is a RFC 3920 conformant "XML" stream
23 implementation for clients, which handles TCP connect up to the resource
24 binding. And provides low level access to the XML nodes on the XML
25 stream along with some high level methods to send the predefined XML
26 stanzas.
27
28 Net::XMPP2::IM::Connection is a more high level module, which is derived
29 from Net::XMPP2::Connection. It handles all the instant messaging client
30 functionality described in RFC 3921.
31
32 Net::XMPP2::Client is a multi account client class. It manages
33 connections to multiple XMPP accounts and tries to offer a nice high
34 level interface to XMPP communication.
35
36 For a list of "Supported extensions" see below.
37
38 There are also other modules in this distribution, for example:
39 Net::XMPP2::Util, Net::XMPP2::Writer, Net::XMPP2::Parser and those I
40 forgot :-) Those modules might be helpful and/or required if you want to
41 use this framework for XMPP.
42
43 See also Net::XMPP2::Writer for a discussion about the brokeness of XML
44 in the XMPP specification.
45
46 If you have any questions or seek for help look below under "SUPPORT".
47
48 REQUIREMENTS
49 One of the major drawbacks I see for Net::XMPP2 is the long list of
50 required modules to make it work.
51
52 AnyEvent
53 For the I/O events and timers.
54
55 XML::Writer
56 For writing "XML".
57
58 XML::Parser::Expat
59 For parsing partial "XML" stuff.
60
61 MIME::Base64
62 For SASL authentication
63
64 Authen::SASL
65 For SASL authentication
66
67 Net::LibIDN
68 For stringprep profiles to handle JIDs.
69
70 Net::SSLeay
71 For SSL connections.
72
73 Net::DNS
74 For SRV RR lookups.
75
76 Digest::SHA1
77 For component authentication.
78
79 And yes, all these are essential for XMPP communication. Even though
80 'instant messaging' and 'presence' is a quite simple problem XMPP
81 somehow was successful at making the task complicated enough to keep me
82 busy for a long time. But all of that time wasn't only for the
83 technology required to get it started, mostly it was for all the quirks,
84 hacks and badly applied "XML" in the protocol which complicated the
85 matter.
86
87 RELEASE NOTES
88 Here are some notes to the releases (release of this version is at top):
89
90 Version
91 * 0.03
92 This release adds new events for attaching information to "XML"
93 stanzas that are in transmission to the server. See also the events
94 "send_*_hook" in Net::XMPP2::Connection.
95
96 The event callbacks als don't have to return a true value anymore.
97 What the return values do depends on the event now.
98
99 The highlight of this release is the implementation of XEP-0114, the
100 Jabber Component Protocol.
101
102 You can also set the initial priority of the presence in
103 Net::XMPP2::IM::Connection now.
104
105 Please consult the Changes file for greater detail about bugfixes
106 and new features.
107
108 * 0.02
109 This release adds lots of small improvements to the API (mostly new
110 events), and also some bugfixes here and there. The release also
111 comes with some new examples, you might want to take a look at the
112 "EXAMPLES" section.
113
114 As a highlight I also present the implementation of XEP-0004 (Data
115 Forms), see also Net::XMPP2::Ext for a description.
116
117 I also added some convenience functions to Net::XMPP2::Util, for
118 example "simxml" which simplifies the generation of XMPP-like "XML".
119
120 * 0.01
121 This release has beta status. The code is already used daily in my
122 client and I keep looking out for bugs. If you find undocumented,
123 missing or faulty code/methods please drop me a mail! See also
124 "BUGS" below.
125
126 Potential edges when using this module: sparely documented methods,
127 missing functionality and generally bugs bugs and bugs. Even though
128 this module is in daily usage there are still lots of cases I might
129 have missed.
130
131 For the next release I'm planning to provide more examples in the
132 documentation and/or samples/ directory, along with bugfixes and
133 enhancements along with some todo items killed from the TODO file.
134
135 TODO
136 There are still lots of items on the TODO list (see also the TODO file
137 in the distribution of Net::XMPP2).
138
139 Sadly this module still misses some decent DOM implementation. Do you
140 know some decent DOM Level 2 implementation for Perl? (I considered
141 switchting to XML::LibXML but I somehow have more trust in the "expat"
142 XML parser, maybe someone wants to implement XML::LibXML based parsing
143 for me (and of course a DOM interface for Net::XMPP2::Node?)
144
145 Why (yet) another XMPP module?
146 The main outstanding feature of this module in comparison to the other
147 XMPP (aka Jabber) modules out there is the support for AnyEvent.
148 AnyEvent permits you to use this module together with other I/O event
149 based programs and libraries (ie. Gtk2 or Event).
150
151 The other modules could often only be integrated in those applications
152 or libraries by using threads. I decided to write this module because I
153 think CPAN lacks an event based XMPP module. Threads are unfortunately
154 not an alternative in Perl at the moment due the limited threading
155 functionality they provide and the global speed hit. I also think that a
156 simple event based I/O framework might be a bit easier to handle than
157 threads.
158
159 Another thing was that I didn't like the APIs of the other modules. In
160 Net::XMPP2 I try to provide low level modules for speaking XMPP as
161 defined in RFC 3920 and RFC 3921 (see also Net::XMPP2::Connection and
162 Net::XMPP2::IM::Connection). But I also try to provide a high level API
163 for easier usage for instant messaging tasks and clients (eg.
164 Net::XMPP2::Client).
165
166 A note about TLS
167 This module also supports TLS, as the specification of XMPP requires an
168 implementation to support TLS.
169
170 Maybe there are still some bugs in the handling of TLS in
171 Net::XMPP2::Connection. So keep an eye on TLS with this module. If you
172 encounter any problems it would be very helpful if you could debug them
173 or at least send me a detailed report on how to reproduce the problem.
174
175 (As I use this module myself I don't expect TLS to be completly broken,
176 but it might break under different circumstances than I have here. Those
177 circumstances might be a different load of data pumped through the TLS
178 connection.)
179
180 I mainly expect problems where available data isn't properly read from
181 the socket or written to it. You might want to take a look at the
182 "debug_send" and "debug_recv" events in Net::XMPP2::Connection.
183
184 Supported extensions
185 See Net::XMPP2::Ext for a list.
186
187 EXAMPLES
188 Following examples are included in this distribution:
189
190 samples/simple_example_1
191 This example script just connects to a server and sends a message
192 and also displays incoming messages on stdout.
193
194 samples/devcl/devcl
195 This is a more advanced 'example'. It requires you to have Gtk2
196 installed. It's mostly used by the author to implement
197 proof-of-concepts. Currently you start the client like this:
198
199 ../Net-XMPP2/samples/devcl/# perl ./devcl <jid> <password>
200
201 The client's main window displays a protocol dump and there is
202 currently a service discovery browser implemented.
203
204 This might be a valuable source if you look for more real-world
205 applications of Net::XMPP2.
206
207 samples/conference_lister
208 See below.
209
210 samples/room_lister
211 See below.
212
213 samples/room_lister_stat
214 These three scripts implements a global room scan.
215 "conference_lister" takes a list of servers (the file is called
216 "servers.xml" which has the same format as the xml file at
217 <http://www.jabber.org/servers.xml>). It then scans all servers for
218 chat room services and lists them into a file "conferences.stor",
219 which is a Storable dump.
220
221 "room_lister" then reads that file and queries all services for
222 rooms, and then all rooms for their occupants. The output file is
223 "room_data.stor", also a Storable dump, which in turn can be read
224 with "room_lister_stat", which transform the data structures into
225 something human readable.
226
227 These scripts are a bit hacky and quite complicated, but maybe it's
228 of any value for someone. You might note "EVQ.pm" in samples which
229 is a module that handles request-throttling (You don't want to flood
230 the server and risk getting the admins attention :).
231
232 samples/simple_component
233 This is a (basic) skeleton for a jabber component.
234
235 For others, which the author might forgot or didn't want to list here
236 see the "samples/" directory.
237
238 More examples will be included in later releases, please feel free to
239 ask the "AUTHOR" if you have any questions about the API. There is also
240 an IRC channel, see "SUPPORT".
241
242 AUTHOR
243 Robin Redeker, "<elmex at ta-sa.org>", JID: "<elmex at jabber.org>"
244
245 BUGS
246 Please note that I'm currently (July 2007) the only developer on this
247 project and I'm very busy with my studies in Computer Science in Summer
248 2007. If you want to ease my workload or want timely releases, please
249 send me patches instead of bug reports or feature requests. I won't
250 forget the reports or requests if you can't or didn't send patches, but
251 it can take a long time until I get enough time to fix/implement them.
252
253 Also try to be as precise as possible with bug reports, if you can't
254 send a patch, it would be best if you find out which code doesn't work
255 and tell me why.
256
257 Please report any bugs or feature requests to "bug-net-xmpp2 at
258 rt.cpan.org", or through the web interface at
259 <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-XMPP2>. I will be
260 notified and then you'll automatically be notified of progress on your
261 bug as I make changes.
262
263 SUPPORT
264 You can find documentation for this module with the perldoc command.
265
266 perldoc Net::XMPP2
267
268 You can also look for information at:
269
270 * IRC: Net::XMPP2 IRC Channel
271 IRC Network: http://freenode.net/
272 Server : chat.freenode.net
273 Channel : #net_xmpp2
274
275 Feel free to join and ask questions!
276
277 * Net::XMPP2 Project Site
278 <http://www.ta-sa.org/>
279
280 * AnnoCPAN: Annotated CPAN documentation
281 <http://annocpan.org/dist/Net-XMPP2>
282
283 * CPAN Ratings
284 <http://cpanratings.perl.org/d/Net-XMPP2>
285
286 * RT: CPAN's request tracker
287 <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Net-XMPP2>
288
289 * Search CPAN
290 <http://search.cpan.org/dist/Net-XMPP2>
291
292 ACKNOWLEDGEMENTS
293 Thanks to the XSF for the development of an open instant messaging
294 protocol (even though it uses "XML").
295
296 And thanks to all people who had to listen to my desperate curses about
297 the brokenness/braindeadness of XMPP. Without you I would've never
298 brought this module to a usable state.
299
300 Thanks to:
301
302 * Carlo von Loesch (aka lynX) <http://www.psyced.org/>
303 For pointing out some typos.
304
305 COPYRIGHT & LICENSE
306 Copyright 2007 Robin Redeker, all rights reserved.
307
308 This program is free software; you can redistribute it and/or modify it
309 under the same terms as Perl itself.
310