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